Expresiones Regulares
Una expresión regular (regex) es un patrón para buscar texto, como un Ctrl+F con comodines. Sirve para validar emails, sacar teléfonos de un texto o limpiar datos. Se usa con import re.
Funciones de re: • re.search(patron, texto) → busca en cualquier parte y devuelve la primera coincidencia (o None). re.search("a+", "baaa") encuentra "aaa" • re.match(patron, texto) → igual, pero solo si el texto EMPIEZA con el patrón. re.match("a", "baaa") da None • re.findall(patron, texto) → lista con todas las coincidencias. re.findall("\\d", "a1b2") da ["1", "2"] • re.sub(patron, nuevo, texto) → reemplaza lo encontrado. re.sub("\\d", "#", "a1b2") da "a#b#"
Piezas del patrón: • \d → un dígito (0-9) • \w → una letra, número o guion bajo • + → "uno o más" de lo anterior. \d+ encuentra 2024 completo • * → "cero o más" • ? → lo anterior es opcional • ( ) → captura una parte. (\d{4})-(\d{2}) separa año y mes de "2024-01" Error típico: olvidar la r antes de las comillas (r"\d"), así Python se confunde con las barras.
import re
texto = "Mi email es juan@ejemplo.com y también uso juan.perez@correo.org"
# re.search - primera coincidencia
match = re.search(r"\w+@\w+\.\w+", texto)
if match:
print(match.group()) # juan@ejemplo.com
print(match.start()) # Posición de inicio
# re.findall - todas las coincidencias
emails = re.findall(r"[\w.-]+@[\w.-]+\.\w+", texto)
print(emails) # ["juan@ejemplo.com", "juan.perez@correo.org"]
# re.match - solo desde el inicio del string
telefono = "555-1234-567"
if re.match(r"\d{3}-\d{4}-\d{3}", telefono):
print("Formato de teléfono válido")
# re.sub - reemplazar
texto_limpio = re.sub(r"[\w.-]+@[\w.-]+\.\w+", "***", texto)
print(texto_limpio) # Oculta emails
# re.split - dividir
oraciones = re.split(r"[.!?]\s*", "Hola. ¿Cómo estás? Bien.")
print(oraciones) # ["Hola", "¿Cómo estás", "Bien", ""]
# Grupos de captura
fecha = "2024-01-15"
match = re.search(r"(\d{4})-(\d{2})-(\d{2})", fecha)
if match:
anio, mes, dia = match.groups()
print(f"Año:{anio} Mes:{mes} Día:{dia}")
# Patrones comunes
PATRON_EMAIL = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"
PATRON_URL = r"https?://[\w.-]+(?:\.[\w.-]+)+[\w./-]*"
PATRON_IP = r"\b(?:\d{1,3}\.){3}\d{1,3}\b"
Practica esta lección
Resuelve los ejercicios del curso de Python en la app, gratis y con corrección automática.
Empezar a practicar