Curso de Python / Buscar y validar formatos con expresiones regulares

Las expresiones regulares localizan patrones de texto y comprueban si una cadena tiene una forma determinada. Una coincidencia no demuestra que su contenido sea válido para la aplicación: encontrar un formato de fecha y comprobar que ese día existe son operaciones diferentes.

Elegir la operación de búsqueda

Operación Pregunta que responde
re.search ¿Hay una parte que coincida en algún lugar?
re.fullmatch ¿Coincide la cadena completa?
re.finditer ¿Cuáles son las coincidencias sucesivas y sus posiciones?

Para extraer varias parejas de un texto, una búsqueda sucesiva es adecuada. Para aceptar un campo individual de un formulario, normalmente interesa comprobar toda la entrada. Confundir ambas preguntas puede hacer que se acepte un fragmento válido rodeado de contenido incorrecto.

Las cadenas raw, escritas como r"...", reducen la confusión entre escapes de Python y del patrón. Siguen respetando la sintaxis de las cadenas de Python; por ejemplo, no pueden terminar con una única barra inversa sin cerrar correctamente el literal.

Extraer campos con nombre y comprobar una fecha

Guarda este código como regex_demo.py y ejecútalo con python regex_demo.py. El módulo re pertenece a la biblioteca estándar.

import re
from datetime import date

text = "A001:3500 B002:8000"
pattern = re.compile(r"(?P<id>[A-Z][0-9]{3}):(?P<amount>[0-9]+)")
for match in pattern.finditer(text):
    print(match["id"], int(match["amount"]))
value = "2026-10-17"
if re.fullmatch(r"[0-9]{4}-[0-9]{2}-[0-9]{2}", value):
    print(date.fromisoformat(value))
A001 3500
B002 8000
2026-10-17

Los grupos con nombre identifican el código y el importe de cada coincidencia. La conversión a int convierte los dígitos en un valor numérico. Después, fullmatch comprueba el formato de la fecha y date.fromisoformat realiza la comprobación de calendario. El patrón de fecha por sí solo también aceptaría 2026-99-99.

Gestionar coincidencias ausentes y formatos complejos

re.search devuelve None cuando no encuentra nada. Si ejecutas match = re.search(r"[0-9]+", "no digits"), comprueba if match is not None: antes de acceder a un grupo. No intentes leer grupos de una coincidencia inexistente.

Para HTML completo utiliza un analizador de HTML; para CSV con comillas y separadores, el módulo csv. Una expresión regular puede ayudar con fragmentos sencillos, pero intentar representar toda una gramática compleja suele introducir casos que el patrón no contempla. La lección de fechas explica la validación semántica del calendario.

Limitar entradas y practicar las condiciones

  1. Cambia A001 por a001 y comprueba el requisito de mayúscula.
  2. Cambia un importe a -1 y observa qué parte deja de coincidir con el patrón actual.
  3. Prueba 2026-02-30: la forma coincide, pero la conversión debe rechazar el día.

Restaura los datos después de cada prueba para comparar una condición a la vez. Controla los patrones admitidos y limita la longitud de entradas externas: ciertas combinaciones de repeticiones pueden consumir demasiado tiempo con textos adversos. La referencia oficial de re describe los grupos, las funciones y las reglas de coincidencia.