Pregunta

Tengo un montón de nombres en un campo que llevan una inicial del segundo nombre con un '.' al final ..

Necesito una expresión regular para convertir este ejemplo:

Kenneth R.

en

Kenneth

I estaba tratando de construir el mío y encontré este sitio útil por cierto ..

http: // www .gskinner.com / RegExr /

pero soy nuevo en Perl & amp; expresiones regulares y solo podía obtener " ... $ " - que es inútil cuando no hay una inicial del segundo nombre al final del primer nombre ...


acabo de encontrar otro formato de nombre que necesita consideración ... 'R. Kelly 'necesita ser' Kelly '

¿Fue útil?

Solución

Para eliminar la última " palabra " si termina con punto:

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

(esto supone que no tienes espacio después de eso)

Para eliminar cualquier palabra que termine con punto:

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

mira el modificador / g si quieres eliminarlos todos ...

y BTW se hacen una lista de casos de prueba para verificar su solución luego intente con datos de palabras reales, probablemente obtendrá algunas sorpresas ...

Otros consejos

Para ocuparse del caso R. Kelly:

s/\w\. *//g

Aquí hay una prueba rápida:

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

Sugeriría que:

  1. Se requiere la opción global ( g ).
  2. La opción que no distingue entre mayúsculas y minúsculas ( i ) no lo es.
  3. Podría considerar buscar iniciales en mayúsculas ( [: upper:] ) solamente.
  4. Múltiples caracteres "iniciales" debe ser visto con sospecha (Entonces w + es probablemente un error a menos que sus datos tengan casos relevantes).
  5. Lea perldoc perlre para obtener más información.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top