Introducción a las Expresiones Regulares

1

Expresiones Regulares: Potencia y Aplicaciones Prácticas

2

Expresiones Regulares Prácticas en Python y JavaScript

3

Patrones con Expresiones Regulares en Logs y Formularios

4

Búsqueda de Teléfonos con Expresiones Regulares

El lenguaje: caracteres, operadores, y construcciones

5

Uso de Expresiones Regulares en Archivos de Texto

6

Expresiones Regulares: Buscar Dígitos, Palabras y Espacios

7

Expresiones Regulares Básicas: Clases de Caracteres y Operadores

8

Uso de Contadores en Expresiones Regulares Avanzadas

9

Expresiones regulares: uso del operador interrogación para búsquedas rápidas

10

Expresiones Regulares: Construcción y Negación de Clases de Carácter

11

Búsqueda de Números de Teléfono sin Letras‍

12

Expresiones Regulares en Archivos CSV: Optimización y Limpieza

Uso práctico de Expresiones Regulares

13

Expresiones Regulares para Filtrar Logs en UNIX

14

Expresiones Regulares para Validar Números Telefónicos

15

Expresiones Regulares para URLs y Dominios Web

16

Validación de correos electrónicos con expresiones regulares

17

Expresiones Regulares en Coordenadas Geográficas

18

Expresiones regulares: validación de nombres propios

Usos avanzados en Expresiones Regulares

19

Expresiones Regulares Avanzadas: Manipulación de Archivos CSV y SQL

Expresiones Regulares en lenguajes de programación

20

Expresiones Regulares en Análisis de URL: Separando Queries

21

Expresiones regulares en Perl, PHP, Python y JavaScript

22

Expresiones Regulares en Perl para Procesar Archivos CSV

23

Expresiones Regulares en PHP: Procesamiento de Archivos CSV

24

Manipulación de datos con Expresiones Regulares en PHP

25

Expresiones Regulares en Python: Filtrado y Análisis de Datos

26

Expresiones Regulares en Java: Lectura Rápida de Archivos CSV

27

Expresiones Regulares en Java: Búsqueda y Filtrado de Datos

28

Validación de Emails con JavaScript y Regex

29

Uso avanzado de grep y expresiones regulares en sistemas UNIX

No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Curso de Expresiones Regulares

Curso de Expresiones Regulares

Alberto Alcocer (Beco)

Alberto Alcocer (Beco)

Expresiones regulares: validación de nombres propios

18/29
Recursos

¿Cómo identificar nombres propios en diferentes países?

Entender cómo los nombres propios pueden variar entre diferentes culturas y países es una tarea desafiante. Esta guía te invita a explorar cómo podemos identificar lo que constituye un nombre propio en distintas regiones, centrándonos en un tema común, pero complejo: los nombres y apellidos. Es crucial aprovechar este conocimiento para interpretar adecuadamente cuáles podrían ser consideradas combinaciones válidas de nombres en múltiples trayectorias culturales.

¿Cuáles son las reglas básicas para identificar un nombre?

Identificar un nombre puede parecer simple en un principio, pero varias reglas y patrones nos pueden ayudar a determinar lo que podría formar un nombre:

  • Dígitos: Si un nombre posee números, es raro que sea un verdadero nombre o apellido.
  • Mayúsculas: Los nombres típicamente comienzan con letras mayúsculas. Sin embargo, algunas excepciones culturales, como los apellidos irlandeses tipo 'McCarthy', muestran mayúsculas intermedias.
  • Longitud mínima: Generalmente, los nombres no tienen menos de cuatro letras.
  • Espacios: Nombres compuestos pueden tener espacios, como 'Juan Pablo'.

¿Cómo manejar nombres con especificidades culturales?

Nombres como 'McGregor' requieren comprender las particularidades culturales que los rodean:

  • Mayúsculas especiales: Algunos apellidos utilizan mayúsculas después de ciertos prefijos. Al reconocer estos patrones, se puede optimizar el reconocimiento de nombres en la programación.
  • Nombres compuestos: Tratar nombres que pueden incluir espacios, tales como 'María José', involucrando un proceso específico para considerarlos como una sola entidad.

¿Qué pasa con la validación de nombres en programación?

Al implementar una lógica para validar nombres, especialmente en programación, es esencial contemplar:

  • Cuantificadores: Usar cuantificadores en la programación puede consolidar la interpretación de cuántas letras deben estar presentes.
  • Greedy y Lazy: Conocer la diferencia entre estos métodos de cuantificación mejorará la precisión al tratar con cadenas de texto.

Por ejemplo, una solución básica en una expresión regular podría ser:

^[A-Z][a-z]{3,}( [A-Z][a-z]*)*$

Esta expresión admite nombres que comienzan con una mayúscula y contienen una cantidad mínima de letras. Los nombres compuestos pueden incluir espacios seguidos por otro segmento en mayúscula.

¿Cómo podemos probar si un texto es realmente un nombre?

Al probar si un texto califica como nombre, se recomienda tener una lista de nombres comunes en una región específica. Esto no solo hace que el proceso sea más efectivo, sino que también permite una aplicación más directa a nuestras necesidades locales.

  • Lista de nombres: Desarrolla una lista de 15 o 20 nombres populares del país en cuestión.
  • Capitalización: Asegúrate de manejar correctamente la capitalización para alinearte con las normativas lingüísticas estandarizadas.

El reto de identificar nombres propios no solo ofrece un ejercicio técnico fascinante, sino que también amplía el entendimiento cultural y la sensibilidad hacia las variaciones globales en las tradiciones de nombres. Los estudiantes y profesionales interesados en mejoras continuas deben explorar cómo estos principios pueden aplicarse y enriquecer sus habilidades de programación al abordar esta cuestión. Continuar aprendiendo es clave para adaptarse a un mundo cada vez más conectado.

Aportes 234

Preguntas 5

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Solución: ^([A-Ú][a-ú]+\s?){1,5}$

  • Pedro Muñoz
  • Deyanira Molina
  • Brayatan Byron
  • Marantoni Núñez
  • Jenny Cortés
  • Ad9 hastra
  • Beethoven
  • J S Mastropiero
  • Éster Cervantes
^[A-ZÁÉÍÓÚ][a-záéíóú]{2,}\s[A-ZÁÉÍÓÚÑ][a-záéíóúñ]{2,}$

PD: Soy de Chile, acá los nombres imposibles existen.

Por si resulta útil, comparto un apunte con otro caso de uso de las expresiones que me ha parecido interesante.
Se trata de utilizar complementos del navegador para buscar dentro de páginas web utilizando expresiones regulares. Dejó aquí el enlace a uno de ellos: Chrome Regex Search
Se puede probar su funcionamiento buscando por el término expresiones regulares en Google y utilizando después esta expresión para buscar con el add-on instalado:

[E|e]xpresi[o?ó?]{1}n(es)?\s([R|e]egular)\1?

Así quedará resaltado el singular/plural de todas las apariciones del término Expresión Regular en la página de resultados o las web consultadas.

^([A-ZÁÉÍÓÚÑ]+[\w.]+ )+([A-ZÁÉÍÓÚÑ]+[\w.]+)$

No he usado \s porque incluye los saltos de línea, así que he puesto un espacio al final del primer paréntesis.
Mi solución incluye todos estos posibles nombres (recopilados de los posteos de los compañeros):

Camilo Sarmiento Gálvez
Alejandro Pliego Abasto
Milagros Reyes Japón
Samuel París Arrabal
Juan Pablo Tafalla
Axel Gálvez Velázquez
Óscar Montreal Aparicio
Jacobo Pozo Tassis
Guillermo Ordóñez Espiga
Eduardo Pousa Curbelo
Ivanna Bienvenida Kevin
Ada Tasis López
Luciana Sáenz García
Florencia Sainz Márquz
Catarina Cazalla Lombarda
Paloma Gallo Perro
Margarita Quesada Florez
Vicente Fox Quesada
Asunción Carballar
Constanza Muñoz
Manuel Andres García Márquez
Iris Graciani
Miguel Ignacio Rodríguez Álvarez
Heli Miguel Robles Álvarez
Verónika Sánchez Ascón
Jhony Ulloa Montalva
Mijahil Barra Li
Kevin David Saldaña Perez
Josie Nathaly Calle Valdiviezo
Paul Thomas Vargas Domínguez
Rodrigo Jiménez Gutiérrez
Jhon Beltrán
Jhon Fredy Beltrán
Jhon Fredy Beltrán León
Ándres Alberto
Juan Carlos Herrera Martínez
Andrés de Jesús Montes Rodríguez
Thais Armada de Medina
María Julia Herrera de Perez
Xi Ping Lu
Jhonnie B. Good Jr
Adriana Villalobos F.

Y no toma ni una línea de ejercicios pasados (dominios, mails, etc)

Resumen / Apuntes / Notas

Dejo algunos 👉 apuntes en GitHub ✨ donde encontrarás ejemplos para entender las expresiones regulares sin tanto lío.

Si buscaramos el nombre de Musk

^[A-Z]\s?[Æ]\s?[A-Za-z]{1,}[-]{1,}[0-9]{1,}\s?Musk

X Æ A-12 Musk

El nombre del hijo de Elon Musk rompio paradigmas de las expresiones regulares =D

^([A-ZÁÉÍÓÚÑ][a-zzáéíóúñ]{1,}\s?){1,}

https://regexr.com/6ahlh

Expression

^([A-ZÁÉÍÓÚÜÑ]([a-záéíóúüñ]+)? )((de )?(del )?(la )?(el )?[A-ZÁÉÍÓÚÜÑ]([a-záéíóúüñ]+)? ?){1,7}$

Texto

María de Jesús Macias López
Antonio Argüelles Roncero
Ana Maria Rios del Baño
Francisco Ladrón de Guevara
Arantzatu Goicoetxea Urdaíz
Maria de la O

Cosas incorrectas que los programadores asumimos acerca del nombre

Este reto es interesante para el curso, pero en la vida real para evitarse dolores de cabezas deben saber que muchas cosas que creen que son universales para los nombres son mentira y no aplican en todos los países del mundo.

  • un nombre no tiene caracteres especiales (mentira): X Æ A-Xii

  • Un nombre no tiene dígitos (mentira): Colombiano su nombre es “6”

  • Un nombre debe tener un mínimo de 2 o 3 caracteres (mentira): Li (como apellido) o aún más en su idioma original 李

Mientras más buscamos aceptar todos los nombres universalmente posibles de todos los idiomas que existen cada vez es más notorio que menos restricciones es quizás la unica opción que nos queda

Mi solucion

^([A-Úa-ú]+\s?){2,}$

Alguien que me diga una expresion regular para encontrar un conjunto de palabras que empieza con una palabra y que termina en otra, alguien please?

Reto:
Para el siguiente conjunto de datos:
Ruben
Juan Pablo
Marcela
Anny
Camila
Rodrigo
Kevin Z
ert123
Ana Maria Gonzales
E3422

^[A-Z][a-z].+\s?

Me funcionó este expresión ^[a-záéíóúñ]{3,}\s[a-záéíóúñ]{3,}\s[a-záéíóúñ]{3,}$

A mi me funciono esta, sin embargo, asumi que no había tildes.

^[A-Z][a-z]{2,}+\s[A-Z]?[\.a-z]?.*$

Feliz día.

Luciana Rodríguez Castro
Santiago Martínez Gutiérrez
Salomé González Vargas
Matías García Ortíz
Isabella López Moreno
Samuel Gómez Jiménez
Mariana Hernández Rojas
Jerónimo Pérez Muñoz
Gabriela Sánchez Torres
Emmanuel Díaz Ramírez
Mariangel Ramírez Díaz
Emiliano Torres Sánchez
Valentina Muñoz Pérez
Maximiliano Rojas Hernández
Antonella Jiménez Gómez
Mathias Moreno López
Samantha Ortíz García
Sebastián Vargas González
Valeria Gutiérrez Martínez
Martín Castro Rodríguez
María José Rodríguez Castro
Dulce María Martínez Gutiérrez
Sara Sofía González Vargas
Luisa Fernanda García Ortíz
Sara Valentina
María Fernanda García Ortíz
Ana Sofía García Ortíz
Ana Lucía González Vargas
María Camila Ortíz García
María Alejandra Ramírez Díaz
Juan José Vargas González
Miguel Angel Muñoz Pérez
Juan Sebastián Ramírez Díaz
Juan David Díaz Ramírez
Samuel David Vargas González
Juan Pablo López Moreno
Andrés Felipe Muñoz Pérez
Juan Esteban García Ortíz
Juan Diego Muñoz Pérez
Angel David López Moreno
Ef3afga Easfgeas Eefe Enfle
Éf3afga Easfgeas Eefe Enfle
^[A-Z][a-zá-ú]{2,}\s?[A-Z]?[a-zá-ú]{2,}\s?[A-Z]?[a-zá-ú]{2,}\s?[A-Z]?[a-zá-ú]{2,}$
Ejecute el siguiente comando de linux (RedHat 9 Developer) `cat nombres.txt | grep -Pi "^[a-záéíóúñ]{1,}( [a-záéíóúñ]{1,})+$"` Ejemplo: ![](https://static.platzi.com/media/user_upload/image-ccdf369a-e767-4180-a897-9d9e4c388bd4.jpg)
En muchos formularios aparecen con este formato los nombres de las personas: Apellido Apellido2, Nombre Nombre2. El Apellido2 y Nombre2 pueden no existir. Formulé la siguiente expresión regulares para capturar este formado de nombre de personas: ^\[A-ZÁÉÍÓÚÑ]\[a-záéíóúñ]+\s?\[A-ZÁÉÍÓÚÑ]?\[a-záéíóúñ]\*?,\s\[A-ZÁÉÍÓÚÑ]\[a-záéíóúñ]+\s?\[A-ZÁÉÍÓÚÑ]?\[a-záéíóúñ]\*?$
En mi caso realicé la siguiente solución para corroborar que solamente se admitan nombres de DJs: * DJ Chrono * DJ E-Motion * DJ Clarity * DJ Thunder * DJ Silver * DJ Adventune * DJ Snow * DJ Treble Trouble * DJ Bassis * Psych `^[DJ]{2,}\s([A-Z-a-z\-]{3,})\s?([A-Za-z]{3,})?$` Por ende el último nombre no hace match con la expresión regular asignada.
SOLUCION: ^\[A-Z]\[a-zá-ú]{2,}\s?\[A-Z]?\[a-zá-ú]{2,}\s?\[A-Z]?\[a-zá-ú]{2,}\s?\[A-Z]?\[a-zá-ú]{2,}$
**My Expreción Regular para colombia:** `^[A-Z][a-z]{3,}\s?[A-Z]?[a-z]{0,}\s[A-Z][a-z]{3,}\s?[A-Z][a-z]*$`
nombres en colombia ```js ^([A-Z][a-z]{3,}\s?){3,4}$ ```
**Mi solución al reto:** ![](https://static.platzi.com/media/user_upload/image-df6dc41d-6b17-4707-8bc6-f2146364e6c5.jpg) ![]() `^[A-Z][a-z]{2,}\s?[A-Z][a-z]{2,}\s?[\Da-z]*$`
**Mi solución del reto** ```js ^[A-Z][a-z]{2,}\s?[A-Z][a-z]{2,}\s?[\Da-z]*$ ```![](https://static.platzi.com/media/user_upload/image-f771ffab-dda5-4df9-beb4-401330a67b8a.jpg)
^(\[A-ZÁ-Ú]\[a-zá-ú]\*\s?){2,4}$
Para los siguientes 5 casos: Rodrigo Jimenez Gutierrez Andres Garcia Duarte Luz del Carmen Chavez Perez Canelo de San Alvarez MacGregor Julian Alejandro Rodante Juez (\[A-Z]\[a-z]{1,}\s\*(\[a-z]\*)?(\[A-Z]\[a-z]\*)?\s\*){2,}
En esta respuesta que dare a continuacion esta debido a que en colombia pueden ocurrir que los nombres hayan dos o 1 nombre, dos o 1 apellido, entones es mas variado por ese caso. ^\[A-z]\[a-z]{2,}\s?\[A-z]\[a-z]{2,}\s?\[A-z]\[a-z]{2,}\s?\[\w{2,}]?\s?\[A-z]+\s?\w\*$
Para nombres con acento al empezar y después de la primera letra al empezar, nombre con dos apellidos, dos nombres y dos apellidos, así seria mi expresión regular (regex): Camilo Sarmiento Gálvez Alejandro Pliego Abasto Milagros Reyes Japón Samuel París Arrabal Manuel Andres García Márquez Axel Gálvez Velázquez Óscar Montreal Aparicio ^\[A-ZÁ-Ú]\[a-zá-ú]{2,}\s?\[A-Z]?\[a-zá-ú]{0,}\s?\[A-ZÁ-Ú]?\[a-zá-ú]{0,}\s?\[A-ZÁ-Ú]?\[a-zá-ú]{0,} notése que coloco acentuada en mayúscula de la Á-Ú y en minúsculas de á-ú.
donde se le sube la dificultad a los bots \[A-ZÀ-ú]\[a-zÀ-ú]{2,}\s\[A-ZÀ-ú]\[a-zÀ-ú]{2,} ![](https://static.platzi.com/media/user_upload/imagen-d72e3c88-5cc5-491b-82c0-aa66f218d4ad.jpg)

Mi propuesta para nombres “mexicanos”:

^([A-ZÁ-Ú]([a-zá-ú]?){1,}\s?\N){1,}$

Camilo Sarmiento Gálvez
Alejandro Pliego Abasto
Milagros Reyes Japón
Samuel París Arrabal
Juan Pablo Tafalla
Axel Gálvez Velázquez
Óscar Montreal Aparicio
Jacobo Pozo Tassis
Guillermo Ordóñez Espiga
Eduardo Pousa Curbelo
Ivanna Bienvenida Kevin
Ada Tasis López
Luci1ana Sáenz García
Florencia Sainz Márquz
Catarina Cazalla Lombarda
Paloma Gallo Perro
Margarita Quesada Florez
Vicente Fox Quesada
Iris Graciani
Asunción Carballar
Constanza Muñoz
Manuel Andres García Márquez
Ñoño Alberto Galván
alberto Reyes Ñuña
Albeto Rangelñ peralta
A Alberta
C Galpdoa

Ruben
Jhon’s
agüero
Juan Pablo
Marcela
José
Anny
Camila
Rodrigo
rodrigo
Kevin Z
kevin Z
ert123
Ana Maria Gonzales
E3422
4E3422

^([A-Za-z]\S?\s?){2,50}$

✨ Filtrando Nombres y Apellidos

Usando JavaScript se filtran los nombres y apellidos de los usuarios teniendo en cuenta obviar los molestos saltos de línea \n.

const text = `
Camilo Sarmiento Gálvez
Alejandro Pliego Abasto
Milagros Reyes Japón
Samuel París Arrabal
Juan Pablo Tafalla
Axel Gálvez Velázquez
Óscar Montreal Aparicio
Jacobo Pozo Tassis
Guillermo Ordóñez Espiga
Eduardo Pousa Curbelo
Ivanna Bienvenida Kevin
Ada Tasis López
Luciana Sáenz García
Florencia Sainz Márquz
Catarina Cazalla Lombarda
Paloma Gallo Perro
Margarita Quesada Florez
Vicente Fox Quesada
Iris Graciani
Asunción Carballar
Constanza Muñoz
Manuél Andres García Márquez
`;
/* 
// Primera versión: 
const regex =
  /^[A-Za-zÀ-ÿ]+\s?[A-Za-zÀ-ÿ]+[\S? ]([A-Za-zÀ-ÿ]+)?[\S? ]([A-Za-zÀ-ÿ]+)/gm; 
*/
// Versión final: 
const regex = /([A-Za-zÀ-ÿ]+[\S? ?]?){1,4}/gm;
console.log(text.match(regex));

Obtenemos:

[
  'Camilo Sarmiento Gálvez',
  'Alejandro Pliego Abasto',
  'Milagros Reyes Japón',
  'Samuel París Arrabal',
  'Juan Pablo Tafalla',
  'Axel Gálvez Velázquez',
  'Óscar Montreal Aparicio',
  'Jacobo Pozo Tassis',
  'Guillermo Ordóñez Espiga',
  'Eduardo Pousa Curbelo',
  'Ivanna Bienvenida Kevin',
  'Ada Tasis López',
  'Luciana Sáenz García',
  'Florencia Sainz Márquz',
  'Catarina Cazalla Lombarda',
  'Paloma Gallo Perro',
  'Margarita Quesada Florez',
  'Vicente Fox Quesada',
  'Iris Graciani',
  'Asunción Carballar',
  'Constanza Muñoz',
  'Manuél Andres García Márquez'
]

Suponiendo que tiene una lista de nombres como la que pasaron en otro comentario.

Camilo Sarmiento Gálvez
Alejandro Pliego Abasto
Milagros Reyes Japón
Samuel París Arrabal
Juan Pablo Tafalla
Axel Gálvez Velázquez
Óscar Montreal Aparicio
Jacobo Pozo Tassis
Guillermo Ordóñez Espiga
Eduardo Pousa Curbelo
Ivanna Bienvenida Kevin
Ada Tasis López
Luciana Sáenz García
Florencia Sainz Márquz
Catarina Cazalla Lombarda
Paloma Gallo Perro
Margarita Quesada Florez
Vicente Fox Quesada
Iris Graciani
Asunción Carballar
Constanza Muñoz
Manuel Andrés García Márquez
Oscar Barajas Tavares
Juan Pérez

Habría que cambiar en los contadores que empiece con 1 hacia infinito o usar el operador “+” para que te tome por ejemplo el nombre “Cayetano Ré”

^([A-Z|Á|É|Í|Ó|Ú|Ñ]+[a-z|á|é|í|ó|ú|ñ]{2,}[\s]?)+$

Mi solución:
^([A-Z][a-z]\s?)$

Pd: aun no pude incluir aquellos con guiones

Tengo un primo cuyo nombre tiene 2 letras, entonces ésta sería mi respuesta:

^([A-zÁ-ú]\s?){1,}[A-zÁ-ú]$ 

Para validar nombres se puede definir una expresión regular que primero detecte la primera letra como una mayuscula y luego el resto como minuscula más un espacio que pueda o no existir. De la siguiente manera: ^([A-Z\u00C0-\u017F][a-z\u00C0-\u017F]+\s?){1,4}$ Además los caractéres \u00C0-\u017F identifican los acentos.

Para que la expresión regular pueda encontrar los caractéres con acento se puede usar lo siguiente: \u00C0-\u017F de manera que se coloque dentro de la clase: [A-Z\u00C0-\u017F] o [a-z\u00C0-\u017F]

.
.
🚧🚧***SPOILER***🚧🚧
.
.
Así lo hice
.
.

^([A-Z][a-z]* ){1,}[A-Z][a-z]*$

Solución al reto

Para estos nombres:

Ruben
Juan Pablo
Marcela
Anny
Camila
Rodrigo
Kevin Z
ert123
Ana Maria Gonzales
E3422

Use esta expresión regular ^([a-zA-Z]+\s?(\d*)?){1,}$ 😁

Para los siguientes nombres:

Juan Fernando Pérez del Corral
Valentina Laverde de la Rosa
Óscar de la Renta
Sara Teresa Sánchez del Pinar
Efraín de las Casas Mejía
Julieta Ponce de León
Martín Elías de los Ríos Acosta
Gabriela de la Pava de la Torre
Matías de Greiff Rincón
Manuela del Pino Hincapié
Sebastián del Campo Yepes
Sofía del Río Arango
Ana María de la Peña Posada
Mónica Patricia de Ávalos Mendoza
oscar gutierrez
carlos45

use:

^[A-ZÁÉÍÓÚÑ][a-záéíóúñ].+[A-ZÁÉÍÓÚÑ][a-záéíóúñ].*$

con el resultado:

Compilando los nombres y apellidos que gentilmente han puesto en este chat, presento mi solución (parcial lamento yo), aquí lo tienen al final de la lista.

Ada Tasis López
Adriana Villalobos F.
Alejandro Pliego Abasto
Ándres Alberto
Andrés de Jesús Montes Rodríguez
Asunción Carballar
Axel Gálvez Velázquez
Camilo Sarmiento Gálvez
Catarina Cazalla Lombarda
Constanza Muñoz
Eduardo Pousa Curbelo
Florencia Sainz Márquz
Guillermo Ordóñez Espiga
Heli Miguel Robles Álvarez
Iris Graciani
Ivanna Bienvenida Kevin
Jacobo Pozo Tassis
Jhon Beltrán
Jhon Fredy Beltrán León
Jhonnie B. Good Jr
Jhony Ulloa Montalva
Josie Nathaly Calle Valdiviezo
Juan Carlos Herrera Martínez
Juan Pablo Tafalla
Kevin David Saldaña Perez
Luciana Sáenz García
Manuel Andres García Márquez
Margarita Quesada Florez
María Julia Herrera de Perez
Miguel Ignacio Rodríguez Álvarez
Mijahil Barra Li
Milagros Reyes Japón
Óscar Montreal Aparicio
Paloma Gallo Perro
Paul Thomas Vargas Domínguez
Rodrigo Jiménez Gutiérrez
Samuel París Arrabal
Thais Armada de Medina
Verónika Sánchez Ascón
Vicente Fox Quesada
Xi Ping Lu

^([a-zá-úA-ZÁ-Ú]{2,} ?)+(([A-Z].)+)? : Selecciona todos los nombres, menos ‘Jhonnie B. Good Jr’ que lo hace desde ‘J’ hasta ‘B.’

Aquí te proporciono otra expresión regular para validar nombres de personas, en este caso, permitiendo también la presencia de apellidos compuestos y caracteres acentuados.

import re
nombres_regex = r'^[A-Za-záéíóúÁÉÍÓÚñÑ]+([\s-][A-Za-záéíóúÁÉÍÓÚñÑ]+)*$'

nombre1 = "Juan Pérez Gómez"
nombre2 = "María De La Cruz González-Ruiz"
nombre3 = "José María Velázquez"

if re.match(nombres_regex, nombre1):
    print("El nombre 1 es válido")

if re.match(nombres_regex, nombre2):
    print("El nombre 2 es válido")

if re.match(nombres_regex, nombre3):
    print("El nombre 3 es válido")

La expresión regular busca cadenas que coincidan con el siguiente patrón:

  • La cadena comienza con una o más letras, incluyendo caracteres acentuados y la letra ñ ([A-Za-záéíóúÁÉÍÓÚñÑ]).

  • Luego, pueden aparecer cero o más repeticiones de un espacio en blanco (\s) o un guión (-) seguido de una o más letras ([A-Za-záéíóúÁÉÍÓÚñÑ]).

  • La expresión regular utiliza paréntesis () y el operador asterisco (*) para indicar que el patrón dentro de los paréntesis puede aparecer cero o más veces.

Esta expresión regular valida nombres que contienen letras, espacios en blanco, guiones y caracteres acentuados, permitiendo la presencia de apellidos compuestos. Si la cadena coincide con este patrón, se considera que el nombre es válido.

Solucion al reto usando VSCode:
^[A-Z][a-z]{1,}\s[A-Z][a-z]{1,}$
nota: Los nombres usados por su sevilleta no llevan acento

mi solución la cual creo abarcaría una gran cantidad de nombres en español ya que también cuenta con todos los caracteres especiales

^([A-ZÁÉÍÓÚ][a-záéíóúñ]{2,}\s?){2,4}$

¿Cómo voy? 🤔

^[A-Z][a-záéíó]{2,}\s[A-Z][a-záéíó]\s?[A-Za-záéíó]{0,}(\s?[A-Z]?[a-záéíó]{0,}){0,8}

Mi intento de resolver el Reto:

Expresion regular para Nombre:
^([a-zA-ZáéíóúÁÉÍÓÚÑñ] ?)+$
sin acentos:
^(\w{1,} ?)+$
^([a-zA-Z] ?)+$

Comparto mi solución al reto

^([A-ZÁÉÍÓÚÑ][a-záéíóúñ]+ ?){2,4}$

Los nombres no pueden tener digito

El muchacho de Colombia llamado 6 aparece

El profesor: 🙇‍♂️🙇‍♂️🙇‍♂️

Hola! Dejo mi solución. Funciono todo como queria, pero quedo un chorizo larguísimo al incluir la ñ, los acentos y los demás signos en las letras.
^[A-ZÄËÏÖÜÁÉÍÓÚÂÊÎÔÛÀÈÌÒÙ]{1,1}[a-zñäëïöüáéíóúáéíóúâêîôûàèìòù]{2,11}\s[A-ZÄËÏÖÜÁÉÍÓÚÂÊÎÔÛÀÈÌÒÙ]{1,1}[a-zñäëïöüáéíóúáéíóúâêîôûàèìòù]{2,11}(\s[A-ZÄËÏÖÜÁÉÍÓÚÂÊÎÔÛÀÈÌÒÙ]{1,1}[a-zñäëïöüáéíóúáéíóúâêîôûàèìòù]{2,11})?(\s[A-ZÄËÏÖÜÁÉÍÓÚÂÊÎÔÛÀÈÌÒÙ]{1,1}[a-zñäëïöüáéíóúáéíóúâêîôûàèìòù]{2,11})?$

^([A-ZÁ-Ú][a-zá-ú])\s([A-ZÁ-Ú][a-zá-ú])\s?([A-ZÁ-Ú][a-zá-ú]+)?\s?([A-ZÁ-Ú][a-zá-ú]+)?$

Mi solución:

^([A-ZÁ-Ú][a-zá-ú]{2,}\s?){2,}$
^([A-Z][a-z][A-Z]?[a-z]+ ?){1,2}

Mi solución: ^([A-ZÀ-úa-z]+ ?){2,4}$

Para nombres Colombianos, lo hice de esta manera
^([A-ZÁ-Ú][a-zá-ú]{1,}\s?){1,4}

Nombres:

Camilo Sarmiento Gálvez
Alejandro Pliego Abasto
Milagros Reyes Japón
Samuel París Arrabal
Juan Pablo Tafalla
Axel Gálvez Velázquez
Óscar Montreal Aparicio
Jacobo Pozo Tassis

Mi Solucion:

([A-ZÁ-Ú][a-zá-ú]{3,}\s?){3,3}

Mi solución: ^[A-ZÓ][a-zó]{2,} ?[A-Z][a-zóíñá]{2,} ?[A-Z][a-zóíñá]* ?[A-Z][a-zóíñá]*$

Mi solución

^([A-Z][a-zá]{1,}\s?){2,}.*$
^([A-ZÀ-ú][a-zÀ-ú]{2,}\s?){2,4}

Mi salio algo complejo:
^([a-zA-ZÁÉÍÓÚÑáóúñíé]+[\w.]+\D ?)+([a-zA-ZÁÉÍÓÚÑáóúñíé]+[\w.]+\D)$

^([A-ZÁÉÍÓÚÑ][a-záéíóúñ]{2,25}\s?){1,6}$

Reto cumplido, solo agregue las tildes de las vocales y el resto era casi igual a lo que hizo el profe.
![](

Está es mi solución:

^([A-Ú][a-ú]+\s)+$

Mi solución

^[A-ZÓÁÉÍÚ][a-záéíóúñ]{2,}((\s[A-ZÁÉÍÓÚ][a-záéíóúñ]{2,}){1,3})?$

pero viendo los comentarios de los compañeros aprendí que el rango de a-ú incluye tildes y la ñ ,
Solución mejorada

^[A-Ú][a-ú]{2,}((\s[A-Ú][a-ú]{2,}){1,3})?$

En un entorno real de python es un poco mas complicado el ejercicio, mas o menos habia dado con una solucion pero que igualmente contenia fallas, ya que los nombres los toma de una manera muy rara ver resultado final:

Camilo Sarmiento GÃ
lvez
Alejandro Pliego Abasto
Milagros Reyes Japón
Samuel París Arrabal
Juan Pablo Tafalla
Axel GÃ
lvez VelÃ
zquez
Óscar Montreal Aparicio
Jacobo Pozo Tassis
Guillermo Ordóñez Espiga
Eduardo Pousa Curbelo
Ivanna Bienvenida Kevin
Ada Tasis López
Luciana SÃ
enz García
Florencia Sainz MÃ
rquz
Catarina Cazalla Lombarda
Paloma Gallo Perro
Margarita Quesada Florez
Vicente Fox Quesada
Iris Graciani
Asunción Carballar
Constanza Muñoz
Manuel Andres García MÃ
rquez

Igualmente buscando resolucion a esto ya que habia nombres que no los tomaba se procedio a adaptar una solucion de stackoverflow, y la misma funciono relativamente bien:

import re

fh = open(r"C:\Users\Alfonso Zapata\jupyter\Cursos\Junio 2022\Curso de expresiones regulares - platzi\REGEX-master\liners.txt", "r").read()

fh

for line in re.findall(r"([A-ZÁ-ÚÑ][^\n0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]]{3,})\s([A-ZÁ-ÚÑ][^\n0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]]{3,})\s([A-ZÁ-ÚÑ][^\n0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]]{3,})\s([A-ZÁ-ÚÑ][^\n0-9_!¡?÷?¿/\\+=@#$%ˆ&*(){}|~<>;:[\]]{3,})", fh):
    print(line)

Anexo capture de jupyterlabs

Les comparto la expresión que me sirvió para completar el reto de los nombres:

^\D[A-Za-zÁ-Úá-ú]+?.*

Cualquier observación es bienvenida. 😃

Mi solución al reto

^([A-ZÁÉÍÓÚ][a-záéíóú]+ [A-ZÁÉÍÓÚ][a-záéíóúñ]+) ? ([A-ZÁÉÍÓÚ][a-záéíóúñ]+)?

Esta RegEx funciona para dos nombres y un apellido, pero no sé como hacer incluir líneas con solo un nombre y un apellido, o los dos nombres y los dos apellidos en una sola regex

^([A-ZÁÉÍÓÚÑ][a-zzáéíóúñ]{1,}\s?){1,}
Mi solución

Hola.

Acá tengo mi aporte.

^[A-ZÁÉÍÓÚ][a-záéíóúñ]{2,}\s[A-ZÁÉÍÓÚ][a-záéíóúñ]{2,}(\s[A-ZÁÉÍÓÚ][a-záéíóúñ]{2,})?(\s[A-ZÁÉÍÓÚ][a-záéíóúñ]{2,})?

Saludos.

Esta es mi solución:

^([A-ZÁÉÍÚÓÑ][a-záéúíóñ]{2,} ?){2,}$
^[\w\sáéíóñ]{1,}$
^([A-ZÀ-ú][a-zà-ú]+\s?)+

Mi respuesta con varias listas:

Use esta Regex y muchos nombres coincidieron

^([\wéáíóúÁÉÍÓÚñÑ]+\s?){4,5}$

Camilo Sarmiento Gálvez
Alejandro Pliego Abasto
Milagros Reyes Japón
Samuel París Arrabal
Juan Pablo Tafalla
Axel Gálvez Velázquez
Óscar Montreal Aparicio
Jacobo Pozo Tassis
Guillermo Ordóñez Espiga
Eduardo Pousa Curbelo
Ivanna Bienvenida Kevin
Ada Tasis López
Luciana Sáenz García
Florencia Sainz Márquz
Catarina Cazalla Lombarda
Paloma Gallo Perro
Margarita Quesada Florez
Vicente Fox Quesada
Iris Graciani
Asunción Carballar Constanza Muñoz
Manuel Andres García Márquez
Andres Ñanco
Rodrigo Jiménez Gutiérrez
Jhon Beltran
Rodrigo Jiménez Gutiérrez
Jhon Fredy Beltrán
Jhon Fredy Beltrán León
Ándres Alberto
Juan Carlos Herrera Martínez
Andrés de Jesús Montes Rodríguez
daniel morales sevillano
daniel alejandro morales sevillano
maria de los angeles popo
Nicole dayan capote vallejo

Asi lo solciones yo:

^[A-ZÑÁÉÍÓÚ][a-zñáéíóú]{3,}(\s?([A-ZÑÁÉÍÓÚ][a-zñáéíóú]{0,})?){1,5}$

Mi solución para Colombia y Latinoamerica

/^([A-ZÁ-Ú][a-ú]{2,}\s?){2,4}$/

Aqui a la solución que llegue:

<^([A-ZÀ-Ú][a-zà-ú]{2,}\s?){2,6}$> 

Solo me falta encontrar la manera que haga match con nombre compuestos como:

María de los Angeles Sánchez Carmona

^[A-ZÁÉÍÓÚ][\wáéíóúñ]+ - Nombres latinos

^([A-ZÁÉÍÓÚ][\wáéíóúñ]+\s?,?)+$ - Nombres separados por espacios

^.+\s?$ - Todos los nombres del mundo termina siendo cualquier string

Esta es mi respuesta.

^[A-ZÑÁÉÍÓÚ][a-zñáéíóú]{2,20}( [A-ZÑÁÉÍÓÚ][a-zñáéíóú]{2,20}){0,3}$

Hace match hasta con dos nombres y dos apellidos. El único problema es que también existen apellidos o nombres con “de”, o “del”, “de la”, etc. Si queremos considerar el nombre completo sería complicado ponerlo para que encaje en las situaciones correctas. Posiblemente para casos complejos sea mejor construir la lógica en el lenguaje de programación, pero con expresiones regulares se puede aplicar condicionales.
Aún no lo he hecho, pero encontré la información en regular-expresions.info. Si alguien le parece interesante puede echarle un vistazo. Tienen guías en muchos aspectos de expresiones regulares adicionales a lo que se ve en este curso también.

Mi aporte es :

^[A-ZÁÉÍÓÚÑ][a-záéíóúñ]{2,}\s?[A-ZÁÉÍÓÚ][a-záéíóúñ]{2,}\s?([A-ZÁÉÍÓÚÑ][a-záéíóúñ]{2,})?

Les comparto mi código:
^[A-ZÁ-Ú]?[a-zá-ú]{2,}?\s[A-ZÁ-Ú]?[a-zá-ú]{2,}?\s?[A-ZÁ-Ú]?[a-zá-ú]{2,}?\s?[A-ZÁ-Ú]?[a-zá-ú]{1,}?\s?$
Nombres usados:
Mauricio Dev,ia Castro
Laura Valentina Cruz Oyola
Jo0an Sebastian cruz Oyola
Mercedes Lasso Devia
Andrés David Gaviria Tovar
Yolanda Oy9la Vargas
Ángel Gómez Ángulo
Andrea Gutierrez
Nota: El doble espacio al final no deja hacer macth.

Asi el mio

^(([A-ZÁÉÍÓÚÑ][a-záéíóúñü]{2,}\s?)){1,5}$

My solution:
lista de nombres:

codigo: ^[A-ZÓ][a-zóá]{2,}\s?[A-ZÓ][a-zóáñí]{2,}\s?[A-ZÓ][a-zóáñí]{2,}.+

Camilo Sarmiento Gálvez
Alejandro Pliego Abasto
Milagros Reyes Japón
Samuel París Arrabal
Juan Pablo Tafalla
Axel Gálvez Velázquez
Óscar Montreal Aparicio
Jacobo Pozo Tassis
Guillermo Ordóñez Espiga
Eduardo Pousa Curbelo
Ivanna Bienvenida Kevin
Ada Tasis López
Luciana Sáenz García
Florencia Sainz Márquz
Catarina Cazalla Lombarda
Paloma Gallo Perro
Margarita Quesada Florez
Vicente Fox Quesada
Iris Graciani
Asunción Carballar
Constanza Muñoz
Manuel Andres García Márquez

^[A-ZZÁÉÍÓÚa-záéíóúñ]{2,}\s?[A-ZZÁÉÍÓÚa-záéíóúñ]{2,}\s?[A-ZZÁÉÍÓÚa-záéíóúñ]{2,}\s?[A-ZZÁÉÍÓÚa-záéíóúñ]{2,}\s?[A-ZZÁÉÍÓÚa-záéíóúñ]{2,}

Lo solucioné así aunque estoy segura que se podría resumir pero bueno fue divertido hacerlo sola 😃

Este seria para grupos de máximo 2 nombres y dos apellidos

^([A-Z][a-záéíóú]{3,}\s?){2,4}$

Hola el mio quedo asi

^\u00f1?\u00d1?[A-z]{1,}\u00f1?[a-z]{1,}\,?\s\u00f1?\u00d1?[A-z]{1,}\u00f1?[a-z]{1,}\,?\s\u00f1?\u00d1?[A-z]{1,}\u00f1?\u00f3?[a-z]{1,}\,?\s$

la estructura permite, ñ Ñ ó, pero solo 3 veces, no encontré la manera o no le entendí XD, para poderlo poner mas veces y no tener que copiar y pegar, también acepta las , pero al mismo tiempo las selecciona

Comparto mi ejercicio 😄. Pensando en el caso de los apellidos, como lo menciona el profesor de tener la mayor probabilidad de solo obtener estos y no los nombres, se me ocurre la siguiente función:

[A-ZÀ-Ú][a-zà-ú]{1,10}\s[A-ZÀ-Ú][a-zà-ú]{1,10}\S$

Y en caso de solo querer tener 1 apellido, asumiendo que el usuario al menos agregará un nombre y un apellido, podría quedar así:

[A-ZÀ-Ú][a-zà-ú]{1,10}\S$

De esta forma no tomamos todo el nombre, sino solo los apellidos tentativamente. Como alternativas, creo que dentro del código se podría crear una condicional donde primero una regex detecte el número de palabras y dependiendo de este, se aplique una segunda regex para extraer nombres o apellidos de forma precisa. 😃

Aquí esta mi solución
([A-Z][a-zñ]{2,}\s?){2,}

Ruben
Juan Pablo
Marcela
Rodrigo
Belen
Camila

Mi solución

([A-Ñ][a-ñúó]{0,}\s?){4}

^[áéíóú A-z]{3,}$

Esta Regex esta para detectar un nombre (Nombre y apellido) o 3 nombres (Nombre y 2 apellidos) o los 2 nombres y los dos apellidos.

^[A-zÁÉÍÓÚ][a-záéíóúñ]{2,}\s[A-zÁÉÍÓÚ][a-záéíóúñ]{2,}\s?[A-zÁÉÍÓÚ]?[a-záéíóúñ]?\s?[A-zÁÉÍÓÚ]?[a-záéíóúñ]?$

Funciono con todos estos

Camilo Sarmiento Gálvez
Alejandro Pliego Abasto
Milagros Reyes Japón
Samuel París Arrabal
Juan Pablo Tafalla
Axel Gálvez Velázquez
Óscar Montreal Aparicio
Jacobo Pozo Tassisf
Guillermo Ordóñez Espiga
Eduardo Pousa Curbelo
Ivanna Bienvenida Kevin
Ada Tasis López
Luciana Sáenz García
Florencia Sainz Márquz
Catarina Cazalla Lombarda
Paloma Gallo Perro
Margarita Quesada Florez
Vicente Fox Quesada
Iris Graciani
Asunción Carballar
Constanza Muñoz
Manuel Andres García Márquez

Buena tarde amigos!

les dejo mi solucion, vi por ahi una en los comentarios que mediante codificacion UTF-* simplificaba los acentos, pero a mi gusto eso pierde legibilidad, de por si una expresion regular no es algo que se pueda leer tan sencillo y luego complicando su lectura.

Recordemos que reducir el codigo tiene que ir de la mano con la legibilidad!

^([A-zÑÁÉÍÓÚñáéíóú]{2,}[ ])+[A-zÑÁÉÍÓÚñáéíóú ]+$

Mi solución al reto de los nombres:

^[A-Z][a-z]{1,}(\s[A-Z][a-z]{1,})?(\s([a-z]{2,2}\s)?[A-Z][a-z]{1,})+$

Ejemplos de nombres válidos:

  • Ruben Blades
  • Juan Pablo Marmol
  • Camila Cabello
  • Gregorio Araoz de Lamadrid Fernandez
  • Gregorio Araoz Fernandez de Lamadrid
  • Juan Manuel Abal Medina
  • Zu Tamagotchi
  • Jorge Salvador Fernandez Lopez Gutierrez
  • Ajo Derse

Ejemplos de nombres NO válidos:

  • Marcela agachate
  • Rodrigo noya
  • belen Francese
  • Jorge
  • Leandro N Alem
  • A Joderse

Me agrado como me quedo asi para mexico:

^([A-Z]?[áÁ-úÚaA-zZ]{3,} ?){1,6}$

Un 6 al final solo como gesto de que salga alguien raro con varios nombres jaja

Oscar Andrés Ramos López
Paula Andrea Nuñez Giraldo
Sebastian Ramos Nuñez
Marco Aureliio Ramos Gomez
Juan Pablo Vaquez
aura Sepulveda Cortez
Maria Paz Ramos

^(([A-ZÁÉÍÓÚÑ][a-záéíóúñ]{2,}) +)+([A-ZÁÉÍÓÚÑ][a-záéíóñ]{2,})$

¿Què tal chicos? ¿còmo van? Deseaba hacer un aporte a los relativamente nuevos en el manejo de editores de código; Resulta que Visual Studio en la búsqueda de caracteres tiene las opciones de expresiones regulares y otras 2 más, de vez en cuando descarta** la opción “Aa”**, la cual es primordial para realizar nuestras búsquedas con Regex, ya que si no está activa, Visual prescindiría del reconocimiento de Mayúsculas o minúsculas.

Esta un poco larga

[A-ZÑÁÉÍÓÚ]{1}[a-zñáéíóú]{1,}\s([a-z]{1,3}\s)?([A-ZÑÁÉÍÓÚ]{1}\.\s)?([A-ZÑÁÉÍÓÚ]{1}[a-zñáéíóú]{1,}\s)?[A-ZÑÁÉÍÓÚ]{1}([a-z]{1}[A-ZÑÁÉÍÓÚ]{1})?[a-zñáéíóú]{1,}\s?([A-ZÑÁÉÍÓÚ]{1}[a-z}{1]\.\s|[A-ZÑÁÉÍÓÚ]{1}\.\s)?([A-ZÑÁÉÍÓÚ]{1}[a-zñáéíóú]{1,})?

Funciona para:
Andrés de Jesús Montes Rodríguez
Porter José Mckenzie Rios
Elmo R. Oneill R.
Maria del C. Montes
Maria del C. Montes Rios
Porter José Mckenzie R.
Porter J. Mckenzie R.

Me funciono con esta

^([A-Z]{1}[a-záéíóú]+)\s?+([A-Z]{1}[a-záéíóú]+)$

Mi solución es algo larga 😅😅… pero lo hace bastante bien 😎
Mi solución:

^[A-záéíóúñÁÉÍÓÚ]{1,1}[a-záéíóúñ]{2,12}\s([A-z]{1,1})+([a-záéíóúñ]{2,12})?\s?([A-z]{1,1}[a-záéíóúñ]{2,12})?\s?([A-z]{1,1}[a-záéíóúñ]{2,12})?\s?([A-z]{1,1}[a-záéíóúñ]{2,12})?$

Soluciona muchos nombres tipo:

Acá está mi solución:

^([A-Z][a-zíáéúóñ]+\s?){1,}\.?$

Funciona con todos estos datos:

Rosa María Martínez Suárez.

Ana María Casanova

María José González Botana de Solá.

María Eugenia Florez.

Clotilde Acosta.

María Cristina Lancelotti

Graciela Zabala.

Cristina De Giacomi.

Rodolfo Francisco Marabotto

Norberto Gurvich

Carlos Alberto Ficicchia Gigliotti

Marcela María Delorenzi

Juan Martín Rago

Fabián Alberto Gómez.

Ricardo Luis Amigorena

Gabriel Julio Fernández

María Cecilia Parrondo

Noemí Rosa Castro

Mauricio Goldfarb

Mariana Espósito

Alejandro Wiebe.

Carla Rivero

Patricia Ramírez

Luciano Giugno

Adrián Martínez

Rubén Castiñeiras

Mariela Anchipi

Rubén Enrique Brieva

Ezequiel Cwirkaluk

Bautista

Ignacio Manuel Saccomano

Horacio Jorge Arias

Alberto Francisco Pochulu

PD: Son nombres de famosos argentinos, les recomiendo hacer lo mismo con famosos de sus países porque son fáciles de buscar en grandes volúmenes y hay de todo tipo 😃