마지막에 점으로 중간 초기를 제거하려면 어떻게해야합니까?
-
22-07-2019 - |
문제
필드에는 ''초기를 '' '로 운반하는 이름이 많이 있습니다. 결국 ..
이 예제를 변환하려면 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
나는 그것을 제안 할 것이다 :
- 글로벌 옵션 (
g
) 필요합니다. - 사례 무의미한 옵션 (
i
) 그렇지 않습니다. - 대문자를 찾는 것을 고려할 수 있습니다 (
[:upper:]
) 이니셜 만. - 여러 문자 "이니셜"은 의심으로보아야합니다. (그래서
w+
데이터가 관련 사례가없는 한 실수 일 것입니다.) - 읽다
perldoc perlre
자세한 내용은.
제휴하지 않습니다 StackOverflow