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'

Foi útil?

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:

  1. É necessária a opção global (g).
  2. A opção insensível caso (i) não é.
  3. Você pode considerar procurando maiúsculas ([:upper:]) apenas as iniciais.
  4. 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.)
  5. Leia perldoc perlre para mais informações.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top