martes, 4 de diciembre de 2012

Expresiones Regulares | Reconocer nombres


Vamos a crear una expresión regular para reconocer nombres y apellidos, tanto compuestos como no compuestos con el siguiente formato:

Apellido1 Apellido2, Nombre. 

Donde Apellido2 puede ser simple o compuesto y tener los prefijos 'de', 'de la' o la forma Apellido2-Apellido3.

Y el nombre puede ser simple o compuesto de la forma Nombre1 Nombre2.

Introducción:
\p{L}+ : Para aceptar palabras con letras mayúsculas y minúsculas.
[ ] : Aceptar espacios en blanco
R? : Operador de opcionalidad, puede darse R o no.
[,] : Aceptar una coma.
de : Aceptar la cadena de.
la : Aceptar la cadena la.
1. E.R. para aceptar los dos apellidos donde el segundo apellido es opcional.

(\p{L}+)(([ ])(\p{L}+))?

Está formada por dos expresiones donde la primera coge el primer apellido, la segunda coge el segundo apellido y el espacio de separación entre los dos apellidos.
Si también queremos coger apellidos compuestos como Quijote de la Mancha, O separados por guion: Fernandez-Cortazar, entonces tenemos que añadir al final de la expresión anterior esta otra.

((([-])(\p{L}+))|((\p{L}+ )(de)(( la)?)( \p{L}+)))?

2. E.R. para aceptar nombres no compuestos.

([,])([ ])(\p{L}+)

Nótese que [,] y [ ] hacen que el nombre quede separado de los apellidos de la siguiente forma: Fernández-Cortázar, Paco
Para finalizar la E.R. para aceptar nombres compuestos donde el segundo nombre es opcional es de la forma:

(([ ])(\p{L}+))?                   

La expresión anterior hay que juntarla con esta expresión para reconocer nombres compuestos y no compuestos.
Resumiendo, la expresión resultante de juntar por orden cada una de estas expresiones es la siguiente:

Apellidos simples

(\p{L}+)(([ ])(\p{L}+))?

Apellidos compuestos

((([-])(\p{L}+))|((\p{L}+ )(de)(( la)?)( \p{L}+)))?

Nombres compuestos

([,])([ ])(\p{L}+)(([ ])(\p{L}+))?

No hay comentarios:

Publicar un comentario