Inicio > Cursos > Python > Expresiones Regulares
PythonPython Avanzado y AplicacionesLección 18 de 24

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"
Consejo📝 Usa r"patrón" (raw string) para regex en Python. Evita que Python interprete los backslashes antes de que lleguen al motor de regex.
← Requests y Consumo de APIsConcurrencia Asíncrona (asyncio) →

Practica esta lección

Resuelve los ejercicios del curso de Python en la app, gratis y con corrección automática.

Empezar a practicar