Saltar al contenido principal

Expresiones regulares

El módulo re proporciona soporte completo para trabajar con expresiones regulares (regular expressions), una herramienta muy potente que permite buscar, extraer, validar o reemplazar patrones de texto. Las expresiones regulares son secuencias de caracteres especiales que definen reglas de coincidencia dentro de cadenas. Con ellas se pueden identificar palabras, números, fechas, correos electrónicos, códigos o cualquier otro patrón textual de forma precisa.

El módulo re está incluido en la biblioteca estándar, por lo que no requiere instalación. Se importa de la siguiente manera:

import re
  • Una expresión regular (regex) es una cadena que describe un patrón.
  • Se utiliza para buscar coincidencias en un texto.
  • Los patrones se componen de caracteres normales y metacaracteres (como ., *, +, ?, [], ^, $, etc.).
  • El módulo re ofrece funciones para realizar búsquedas, reemplazos o divisiones según estos patrones.
Metacaracteres más comunes
SímboloSignificadoEjemplo de coincidencia
.Cualquier carácter excepto salto de líneaa.c → “abc”, “axc”
^Inicio de la cadena^Hola → “Hola mundo”
$Final de la cadenamundo$ → “Hola mundo”
*Cero o más repeticionesab* → “a”, “ab”, “abb”
+Una o más repeticionesab+ → “ab”, “abb”
?Cero o una repeticióncolou?r → “color”, “colour”
{n,m}Entre n y m repeticiones\d{2,4} → “12”, “2025”
[]Conjunto de caracteres[aeiou] → “a”, “e”, “i”, “o”, “u”
\dCualquier dígito (0-9)\d\d → “25”
\wCualquier carácter alfanumérico\w+ → “Python3”
\sEspacio en blanco\s → “ ”, “\t”

1️⃣ Búsqueda de patrones​

En este apartado veremos localizar coincidencias de texto dentro de cadenas mediante expresiones regulares. El módulo re incluye varias funciones para buscar patrones: algunas analizan el texto desde el inicio, otras recorren toda la cadena o devuelven múltiples resultados.

🟩 Funciones principales​

FunciónDescripciónEjemplo
re.match(patrón, texto)Busca el patrón solo al inicio del texto.re.match("Hola", "Hola mundo")
re.search(patrón, texto)Busca la primera coincidencia en todo el texto.re.search("mundo", "Hola mundo")
re.findall(patrón, texto)Devuelve todas las coincidencias en una lista.re.findall("\d+", "Hay 2 perros y 3 gatos")
re.finditer(patrón, texto)Devuelve un iterador con los objetos de coincidencia.for x in re.finditer("a", texto): ...
re.fullmatch(patrón, texto)Verifica si el texto completo coincide con el patrón.re.fullmatch("\d{4}", "2025")

🟦 Ejemplos prácticos​

Ejemplo 1: búsqueda en texto​

Búsqueda simple con search()
import re

texto = "Python es un lenguaje de programación."
resultado = re.search("lenguaje", texto)

if resultado:
print("Coincidencia encontrada en la posición:", resultado.start())
en este ejemplo
  • La función search() localiza la primera aparición del patrón dentro del texto.
  • El método .start() devuelve la posición inicial de la coincidencia.

Ejemplo 2: búsqueda múltiple con findall()​

Buscar todos los números en un texto
import re

texto = "En la clase hay 25 alumnos y 3 profesores."
numeros = re.findall(r"\d+", texto)
print("Números encontrados:", numeros)
en este ejemplo
  • El patrón \d+ busca uno o más dígitos consecutivos.
  • La función findall() devuelve una lista con todas las coincidencias encontradas.

Ejemplo 3: coincidencia exacta con fullmatch()​

Validar una cadena completa
import re

codigo = "ABC123"
if re.fullmatch(r"[A-Z]{3}\d{3}", codigo):
print("Formato correcto")
else:
print("Formato incorrecto")
en este ejemplo
  • fullmatch() comprueba si toda la cadena cumple el patrón.
  • En este ejemplo, el código debe tener 3 letras mayúsculas seguidas de 3 números.

2️⃣ Sustitución y división de texto​

Además de buscar coincidencias, las expresiones regulares permiten modificar o fragmentar textos según reglas concretas. Con las funciones sub() y split() es posible reemplazar partes de una cadena o dividirla en secciones basándose en un patrón. Este tipo de operaciones son muy útiles en tareas de limpieza y preparación de datos, así como en el tratamiento de documentos o registros.

🟩 Funciones principales​

FunciónDescripciónEjemplo
re.sub(patrón, reemplazo, texto)Sustituye las coincidencias del patrón.re.sub("\d", "#", "Año 2025")
re.split(patrón, texto)Divide el texto por el patrón.re.split("\s+", "uno dos tres")

🟦 Ejemplos prácticos​

Ejemplo 1: sustitución de texto​

Reemplazar números por símbolo
import re

texto = "Teléfono: 600123456"
nuevo_texto = re.sub(r"\d", "*", texto)
print("Texto anonimizado:", nuevo_texto)
en este ejemplo
  • El patrón \d identifica cada dígito.
  • La función re.sub() los sustituye por el carácter *, útil para ocultar datos sensibles.

Ejemplo 2: división de texto​

Dividir texto en palabras
import re

texto = "Python es un lenguaje de programación moderno"
palabras = re.split(r"\s+", texto)
print(palabras)
en este ejemplo
  • El patrón \s+ indica uno o más espacios en blanco.
  • re.split() separa el texto en una lista de palabras.

3️⃣ Validación de datos​

Una de las aplicaciones más frecuentes de las expresiones regulares es la validación de formatos de entrada. Gracias a su precisión, es posible verificar si un texto cumple un formato específico, como un correo electrónico, una fecha o una contraseña. En este apartado se verán ejemplos prácticos de validación, fundamentales en el desarrollo de formularios, sistemas de registro o control de datos.

🟩 Ejemplos prácticos​

Ejemplo 1: validar dirección de correo electrónico​

Validación de email
import re

correo = "usuario123@correo.com"
patron = r"^[\w\.-]+@[\w\.-]+\.\w+$"

if re.fullmatch(patron, correo):
print("Correo válido")
else:
print("Correo no válido")
en este ejemplo

El patrón indica:

  • ^[\w\.-]+ → inicio de cadena con caracteres válidos antes del @.
  • @ → símbolo obligatorio.
  • [\w\.-]+ → dominio.
  • \.\w+$ → punto seguido de la extensión.

La combinación cubre la mayoría de los formatos de correo electrónico estándar.

Ejemplo 2: validar una fecha simple​

Validación de fecha en formato dd/mm/aaaa
import re

fecha = "12/10/2025"
patron = r"^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[0-2])/\d{4}$"

if re.fullmatch(patron, fecha):
print("Fecha válida")
else:
print("Fecha incorrecta")
en este ejemplo

El patrón asegura que:

  • El día esté entre 01 y 31.
  • El mes entre 01 y 12.
  • El año contenga 4 dígitos. Aunque no valida meses con menos días, es suficiente para controles básicos.

4️⃣ Grupos de captura​

Las expresiones regulares no solo permiten identificar coincidencias, sino también extraer información concreta de un texto. Para ello se utilizan los grupos de captura, definidos mediante paréntesis (). Estos grupos actúan como “subpatrones” dentro de la expresión, lo que permite obtener partes específicas de la coincidencia, como nombres, precios o valores numéricos.

🟩 Ejemplo práctico​

Ejemplo: extraer datos estructurados​

Extracción de datos con grupos de captura
import re

texto = "Producto: Teclado, Precio: 45.90€, Stock: 120 unidades"
patron = r"Producto:\s*(.*),\s*Precio:\s*([\d\.]+)€"

resultado = re.search(patron, texto)
if resultado:
producto = resultado.group(1)
precio = resultado.group(2)
print("Producto:", producto)
print("Precio:", precio)
en este ejemplo
  • Los grupos (.*) y ([\d\.]+) permiten capturar partes concretas del texto.
  • group(1) y group(2) acceden a esas secciones, facilitando la extracción de información estructurada.

5️⃣ Uso de banderas (flags)​

Las banderas modifican el comportamiento de las expresiones regulares, adaptándolas a diferentes necesidades. Con ellas se puede indicar, por ejemplo, que la búsqueda no distinga entre mayúsculas y minúsculas, que abarque varias líneas o que el punto (.) también coincida con saltos de línea. Aprender a usar estas banderas ayuda a hacer las búsquedas más flexibles y eficientes en distintos contextos.

🟩 Funciones principales​

BanderaDescripción
re.IGNORECASE o re.IIgnora mayúsculas y minúsculas.
re.MULTILINE o re.MPermite coincidencias en varias líneas.
re.DOTALL o re.SHace que . también coincida con saltos de línea.

🟦 Ejemplo práctico​

Ejemplo: uso de banderas​

Búsqueda insensible a mayúsculas
import re

texto = "Python es divertido"
if re.search("PYTHON", texto, re.IGNORECASE):
print("Coincidencia encontrada (sin distinguir mayúsculas).")
en este ejemplo

La bandera IGNORECASE permite que el patrón coincida independientemente del uso de mayúsculas o minúsculas.


📊 Tabla resumen​

FunciónPropósitoEjemplo
search()Busca la primera coincidencia en un texto.re.search("dato", texto)
findall()Devuelve todas las coincidencias.re.findall(r"\d+", texto)
sub()Sustituye coincidencias por otro texto.re.sub("\s+", " ", texto)
split()Divide un texto por un patrón.re.split(",", texto)
fullmatch()Comprueba coincidencia completa.re.fullmatch(patron, texto)

Las expresiones regulares son una herramienta indispensable para el trabajo con texto. Aunque su sintaxis puede parecer compleja al principio, dominar el módulo re permite procesar información con una precisión y flexibilidad inigualables, optimizando tareas de validación, búsqueda y transformación de datos en Python.


🧩 Practica las expresiones regulares​

Las expresiones regulares son un recurso muy util pero requiere práctica.

Prueba a realizar estos ejercicios y mejora tu habilidad ... Descarga el archivo para practicar

Puedes consultar las soluciones aquí