Lección 37 de 45 · Python intermedio

Expresiones regulares

Las expresiones regulares dejan de intimidar cuando un patrón se construye por piezas pequeñas y cada símbolo responde a una pregunta concreta.

TextoPatrón incrementalPatrones
Índice · Lección 37/45
No intentes “leer regex” de golpe: traduce una pieza cada vez

Una expresión regular describe la forma de un texto. Sirve cuando buscas algo más flexible que una cadena exacta: «uno o más dígitos», «tres letras seguidas» o «un código que ocupa toda la entrada».

En esta lección solo necesitas cuatro piezas: texto literal, \d, + y las funciones de búsqueda.

Evidencia de aprendizaje

Construir un patrón corto pieza a pieza y comprobar qué fragmentos del texto coincide cada pieza.

Empieza buscando una forma sencilla dentro de un texto mayor

\d+ significa “uno o más dígitos seguidos”
import re

texto = "Pedido 482 preparado"
coincidencia = re.search(r"\d+", texto)
print(coincidencia.group())

\d representa un dígito. + pide una o más repeticiones de la pieza anterior. Por eso el patrón encuentra 482 como un bloque.

El prefijo r crea un raw string y hace más cómodo escribir patrones con barras invertidas.

search encuentra una coincidencia; findall reúne todas

Extraer varios números
import re

texto = "cajas: 4, unidades: 18"
numeros = re.findall(r"\d+", texto)
print(numeros)

El resultado contiene strings porque la regex está trabajando sobre texto. Si después quieres sumar, convierte explícitamente esos fragmentos a int.

Predicción: antes de ejecutar, localiza visualmente cada grupo continuo de dígitos. Eso es exactamente lo que findall va a recoger.

Ampliación: validar toda la entrada

fullmatch(), clases de caracteres como [A-Z] y cuantificadores exactos como {3} son útiles, pero no forman parte del núcleo. Primero domina literal, \d, +, search y findall.

Construye el patrón y observa qué se ilumina

\dun dígito → 42 y 7
\d+uno o más dígitos → 42 y 7

El + no significa “suma”: dentro de una regex significa “repite la pieza anterior una o más veces”.

Completa el patrón mínimo para encontrar los dos bloques numéricos del texto.

Salida esperada
['42', '7']
regex.py
La salida aparecerá aquí.

Necesito una pista
  • Empieza por la pieza que significa “dígito”: \d.
  • Añade + para agrupar varios dígitos consecutivos.
Ver una solución razonada
import re

texto = "producto 42, lote 7"
ids = re.findall(r"\d+", texto)
print(ids)

Una regex gigante no es una medalla de buen código

Si el patrón crece hasta que nadie puede explicar qué valida, dividir el problema o usar código normal puede ser mejor. Las regex son excelentes para patrones locales; no tienen que resolver por sí solas toda la lógica de negocio.

Puedes seguir cuando...

puedes mirar r"\d+" y explicar cada pieza, y sabes elegir entre buscar una parte del texto o validar la cadena completa.