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