Saltar al contenido principal
Python intermedio2026-07-31 · 11 min de lectura

Explicación de Python Regex (2026)

Regex es la característica más temida de Python. No es tan difícil, pero el 80% de los tutoriales introducen la teoría (\d, \w, codicioso versus perezoso) antes de mostrarte un patrón único que realmente usarías en código real. Este tutorial cambia eso.

Cubriremos: los conceptos básicos del módulo re, los cinco patrones que cubren el 90% del trabajo real, cuando re.compile realmente ayuda, grupos con nombre versus grupos numerados, y los cuatro casos en los que regex es la herramienta INCORRECTA.

El módulo en 60 segundos

Todo vive en el módulo stdlib re. Tres funciones cubren la mayoría de las necesidades:

▶ PYTHONeditable · runs in your browser

Regla: utilice re.search en caso de duda. re.match solo verifica el inicio; olvidar eso lleva a "¡mi expresión regular no coincide!" 30 minutos perdidos.

Cuerdas sin procesar: úsalas siempre

El prefijo r"..." deshabilita la interpretación de la barra invertida. Sin él, "\d" se convierte en "\\d" en Python, lo que el motor de expresiones regulares ve como \d; el mismo resultado, pero solo por accidente y solo para \d. "\n" en una expresión regular es una nueva línea, no los dos caracteres ` + n`.

▶ PYTHONeditable · runs in your browser

Memoria muscular: cada literal de expresión regular comienza con "r". Sin excepciones.

Los 5 patrones que cubren el 90% del trabajo real

1. Extrae todos los números enteros del texto

▶ PYTHONeditable · runs in your browser

Tenga en cuenta que 199.99 se divide en ['199', '99'] — \d+ no cruza el punto. Utilice r"\d+(?:\.\d+)?" para decimales opcionales:

▶ PYTHONeditable · runs in your browser

2. Normalizar los espacios en blanco

▶ PYTHONeditable · runs in your browser

\s+ coincide con cualquier conjunto de espacios/tabulaciones/nuevas líneas. Reemplazar con un solo espacio, quitar los bordes. Esta es la respuesta de Python a sed -E 's/[[:space:]]+/ /g'.

3. Extraiga el nombre de host de una URL

▶ PYTHONeditable · runs in your browser

Los paréntesis crean un grupo de captura; .group(1) devuelve su contenido. [^/:]+ = "uno o más caracteres que no son / o :" — se detiene en el separador de puerto O en la ruta.

Para el análisis de URL de producción, utilice urllib.parse.urlparse (maneja casos extremos como información de usuario + IPv6). Regex es para una extracción rápida y sucia.

4. Validación de correo electrónico suelta

NO existe una expresión regular que valide completamente los correos electrónicos según RFC 5322. Cualquiera que le diga lo contrario está vendiendo algo. Pero este detecta el 99% de las direcciones reales sin rechazar falsamente las buenas:

▶ PYTHONeditable · runs in your browser

Los anclajes (^ y $) fuerzan la coincidencia de cadenas completas. Sin ellos, "foo@bar" dentro de una oración más grande coincidiría.

Producción: enviar un correo electrónico de confirmación. Ese es el ÚNICO validador de correo electrónico confiable.

5. Grupos de captura con nombre

Los grupos numerados ((...) + .group(1)) están bien para 2-3 capturas. Más allá de eso, los nombres ganan:

▶ PYTHONeditable · runs in your browser

.groupdict() devuelve un dictado de todos los grupos nombrados. Agregue/reordene grupos sin dividir cada sitio de llamada que haga referencia a .group(3).

re.compile — cuando realmente ayuda

▶ PYTHONeditable · runs in your browser

Stdlib mantiene una pequeña caché de patrones compilados (tamaño predeterminado 512), por lo que las llamadas únicas a re.search(pattern, text) son efectivamente gratuitas después del primer acceso. re.compile ayuda explícitamente cuando:

1. El patrón se utiliza dentro de un bucle cerrado (millones de coincidencias).

2. Desea almacenar el patrón como una constante a nivel de módulo para la capacidad de grep.

3. Necesita .finditer(), .pattern, .flags en el objeto compilado.

No compiles demasiado. Cada re.compile a nivel de módulo agrega un pequeño costo de tiempo de importación.

Banderas comunes

▶ PYTHONeditable · runs in your browser

Combinar con |: re.IGNORECASE | re.MULTILINE.

Cuando regex es la herramienta INCORRECTA

1. Análisis de HTML/XML → utilice un analizador real

▶ PYTHONeditable · runs in your browser

La respuesta clásica de Stack Overflow para esto tiene 20 años y sigue siendo cierta.

2. Analizando JSON → use json

El módulo json maneja comillas anidadas, caracteres de escape, Unicode y todos los casos extremos de RFC 8259. JSON de análisis de expresiones regulares es una señal antipatrón.

3. Analizar fechas → use dateutil o datetime.strptime

dateutil.parser.parse("2026-07-30") acepta todos los formatos que un humano pueda escribir. datetime.strptime maneja formatos conocidos de manera eficiente. Ambos manejan zonas horarias. Regex necesitaría reinventarlo todo.

4. Patrones anidados/recursivos → use un generador de analizadores

Las expresiones equilibradas, JSON anidadas y de pares coincidentes están formalmente más allá del poder de las expresiones regulares (territorio de gramática libre de contexto). Utilice pyparsing / lark / ANTLR, o simplemente recorra la cadena con un pequeño analizador.

Depuración de expresiones regulares

Utilice regex101.com (elija la versión "Python"). Pegue el patrón + texto de muestra; resalta coincidencias en tiempo real, explica cada metacarácter y muestra grupos con nombres. La forma más rápida de aprender expresiones regulares de forma intuitiva.

Para la depuración a nivel de código, re.DEBUG imprime la máquina de estado compilada:

▶ PYTHONeditable · runs in your browser

Practica

Escribe una expresión regular para cada uno. Soluciones a continuación.

1. Extraiga el número de versión de "Python 3.13.2 (principal, 15 de enero de 2026, 10:32:11)"; debería devolver "3.13.2".

2. Divida "manzana,plátano; naranja cereza" en cualquier delimitador (,, ; o espacio).

3. Vuelva a escribir foo.bar_baz-123 como FOO.BAR_BAZ-123 (solo letras mayúsculas, deje dígitos y puntuación).

Soluciones:

▶ PYTHONeditable · runs in your browser

Regex es una superpotencia una vez que superas los primeros 10 patrones. El truco consiste en desarrollar la memoria muscular con los cinco anteriores: cubren el 90% del trabajo real. Busque un analizador real en el momento en que se encuentre escribiendo referencias retrospectivas para equilibrar los pares.

Siguiente paso: lecciones de expresiones regulares + procesamiento de texto en la sección Automatización: practique con archivos de registro, datos CSV y tareas de raspado web con Python real ejecutándose en su navegador.

¿Listo para probarlo?

15 lecciones gratis después de un registro gratuito, sin tarjeta. Pruebe la plataforma y luego decida.

Empieza gratis →

Or unlock every lesson

Pro — $12/mo, unlimited AI, cancel any time. Refund within 14 days worldwide.

See Pro plans →

Get one Python lesson + one career idea every Friday

No spam, no "buy our course now". Three bullets, every Friday. Unsubscribe with one click.