Como posso remover inicial do meio com um ponto no final?
-
22-07-2019 - |
Pergunta
Eu tenho um monte de nomes em um campo que carregam um meio inicial com um '' no final ..
eu preciso de um regex para converter este exemplo:
Kenneth R.
em
Kenneth
I estava tentando construir a minha própria e encontrei este site útil btw ..
http: // www .gskinner.com / RegExr /
mas eu sou novo para Perl e expressões regulares e só poderia obter "... $" - que é inútil quando não há meio inicial no final do primeiro nome ....
eu só encontrei um outro formato de nome que deve ser considerada ... 'R. Kelly' deve ser 'Kelly'
Solução
Para remover a última "palavra" se ele termina com ponto:
my $name =~ s/\w+\.$//i;
(Isto supõe que você não tem qualquer espaço depois disso)
Para remover qualquer palavra terminando com ponto:
my $name =~ s/\w+\.//i;
olhar para o / g modificador se você quiser removê-los todos ...
e BTW fazer-se uma lista de casos de teste para verificar sua solução tente com dados de palavra real, você provavelmente terá algumas surpresas ...
Outras dicas
Para cuidar do caso R. Kelly:
s/\w\. *//g
Aqui está um teste rápido:
$ echo 'R. Kelly
Kenneth R.
R. Kemp R.
John Q. Smith' | perl -pe 's/\w\. *//g'
Kelly
Kenneth
Kemp
John Smith
Eu sugiro que:
- É necessária a opção global (
g
). - A opção insensível caso (
i
) não é. - Você pode considerar procurando maiúsculas (
[:upper:]
) apenas as iniciais. - caráter múltiplo "iniciais" devem ser vistos com desconfiança. (Então
w+
é provavelmente um erro a menos que seus dados tem casos relevantes.) - Leia
perldoc perlre
para mais informações.