문제

필드에는 ''초기를 '' '로 운반하는 이름이 많이 있습니다. 결국 ..

이 예제를 변환하려면 Regex가 필요합니다.

케네스 R.

~ 안으로

케네스

나는 내 자신을 만들려고 노력 했고이 유용한 사이트 btw ..

http://www.gskinner.com/regexr/

그러나 나는 Perl & Regular Expressions를 처음 접했고 "... $"만 얻을 수 있습니다. 이름의 끝에 중간 초기가 없을 때는 쓸모가 없습니다 ....


방금 고려해야 할 또 다른 이름 형식을 찾았습니다 ... 'R. 켈리 '는'켈리 '가되어야합니다.

도움이 되었습니까?

해결책

DOT로 끝나면 마지막 "단어"를 제거합니다.

my $name =~ s/\w+\.$//i;

(이것은 당신이 그 후에 공간이 없다고 가정합니다)

도트로 끝나는 단어를 제거하려면 :

my $name =~ s/\w+\.//i;

/g 수정자를 모두 제거하고 싶다면 ...

그리고 BTW는 솔루션을 확인하기위한 테스트 케이스 목록으로 만들고 실제 단어 데이터로 시도하면 놀라운 일을 할 것입니다 ...

다른 팁

R. Kelly 사례를 돌보기 위해 :

s/\w\. *//g

다음은 빠른 테스트입니다.

$ echo 'R. Kelly
Kenneth R.
R. Kemp R.
John Q. Smith' | perl -pe 's/\w\. *//g'
Kelly
Kenneth 
Kemp 
John Smith

나는 그것을 제안 할 것이다 :

  1. 글로벌 옵션 (g) 필요합니다.
  2. 사례 무의미한 옵션 (i) 그렇지 않습니다.
  3. 대문자를 찾는 것을 고려할 수 있습니다 ([:upper:]) 이니셜 만.
  4. 여러 문자 "이니셜"은 의심으로보아야합니다. (그래서 w+ 데이터가 관련 사례가없는 한 실수 일 것입니다.)
  5. 읽다 perldoc perlre 자세한 내용은.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top