Dominando Expresiones Regulares en Python: re.match(), re.search(), re.findall() — Ejemplos Prácticos
¿Qué es una Expresión Regular en Python?
Una expresión regular (regex) es una descripción textual compacta que le dice a Python cómo localizar patrones dentro de un string. Las regex son indispensables para extracción de datos, validación y transformación en bases de código, logs, archivos de configuración y proyectos de web scraping.
En Python, el módulo re viene con el intérprete y expone una rica API para compilar patrones, buscar y reemplazar texto. Ya sea filtrando entrada de usuario, parseando logs o scrapeando contenido web, un sólido dominio de los fundamentos de regex ahorra tiempo y reduce bugs.
Conceptos Básicos de Regex
- Caracteres literales — coinciden con el texto exacto que escribes.
- Metacaracteres — símbolos especiales que describen clases, rangos o cuantificadores (ej.
\d,\w,+,?,*). - Anclas —
^y$fijan el patrón al inicio o fin de un string. - Cuantificadores — especifican cuántas veces un token puede repetirse.
- Grupos y alternancia — capturan sub-coincidencias y permiten múltiples opciones.
- Flags — modifican comportamiento del patrón (case-insensitive, multilínea, etc.).
Tabla de Identificadores Comunes
| Identificador | Descripción | Espacio en Blanco | Escape Especial |
|---|---|---|---|
| \d | Cualquier dígito (0-9) | \n | ., +, *, ?, [], $, ^, (, ), {}, |, \ |
| \D | No dígito | \s | |
| \s | Espacio, tab, salto de línea, etc. | \t | |
| \S | No espacio | \e | |
| \w | Alfanumérico más underscore | \r | |
| \W | No alfanumérico (excluyendo underscore) | \f | |
| . | Cualquier carácter excepto salto de línea | — | |
| \b | Límite de palabra | — | |
| \. | Punto literal | — | |
| \{x} | Exactamente x ocurrencias | — |
Primeros Pasos con re
import re
El módulo re es parte de la biblioteca estándar de Python y no requiere dependencias externas. Casos de uso comunes incluyen:
- Validación de strings (ej. emails, números de teléfono)
- Extracción de datos de texto no estructurado
- Web scraping automatizado
Ejemplo 1: \w+ y ^
^— ancla al inicio del string.\w+— uno o más caracteres de palabra (letras, dígitos, underscore).
Usando estos, podemos capturar la primera palabra de un string:
import re sample = "guru99, la educación es divertida" result = re.findall(r"^\w+", sample) print(result) # Output: ['guru99']
Eliminando el + devolvería solo el primer carácter: ["g"].
Ejemplo 2: Dividiendo en Espacios en Blanco con \s
La función re.split() puede dividir un string donde coincida un patrón. Usando \s divide en cualquier carácter de espacio en blanco.
import re texto = "estamos dividiendo las palabras" print(re.split(r"\s", texto)) # ['estamos', 'dividiendo', 'las', 'palabras']
Si se omite la barra invertida, s se trata como literal, resultando en divisiones en cada carácter s.
Resumen de Métodos Regex
re.match()— verifica coincidencia solo al inicio del string.re.search()— escanea todo el string y devuelve la primera coincidencia.re.findall()— devuelve lista de todas las coincidencias no superpuestas.
Usando re.match()
import re texto = "guru99 es una gran plataforma" match = re.match(r"^\w+", texto) print(match.group() if match else "Sin coincidencia") # Output: guru99
Usando re.search()
import re
texto = "Software Testing es divertido"
for patron in ["Software testing", "guru99"]:
encontrado = re.search(patron, texto, re.IGNORECASE)
print(f"Buscando '{patron}' en '{texto}' - {'¡encontrado!' if encontrado else 'sin coincidencia'}")
Usando re.findall()
import re
emails = "guru99@google.com, careerguru99@hotmail.com, users@yahoomail.com"
encontrados = re.findall(r"[\w\.-]+@[\w\.-]+", emails)
for e in encontrados:
print(e)
Flags de Regex
Los flags modifican el comportamiento del patrón. Flags comunes incluyen:
| Flag | Descripción |
|---|---|
| re.M (re.MULTILINE) | Hace que ^ y $ coincidan con inicio y fin de cada línea. |
| re.I (re.IGNORECASE) | Ignora distinción de mayúsculas/minúsculas. |
| re.S (re.DOTALL) | Hace que punto coincida con saltos de línea. |
| re.U (re.UNICODE) | Aplica clases de caracteres Unicode-aware. |
| re.L (re.LOCALE) | Hace que clases dependan del locale actual. |
| re.X (re.VERBOSE) | Permite espacios en blanco y comentarios en el patrón. |
Ejemplo Multilínea
import re texto = """guru99 careerguru99 selenium""" print(re.findall(r"^\w", texto)) # ['g'] print(re.findall(r"^\w", texto, re.MULTILINE)) # ['g', 'c', 's']
Compatibilidad con Python 2
Todos los ejemplos arriba están escritos para Python 3. Si debes ejecutarlos bajo Python 2, reemplaza sentencias print() con sintaxis Python 2 y asegura que el módulo re se importe de la misma forma.
Conclusión
Dominar regex en Python te da un toolkit potente para procesamiento de texto:
- Usa
re.match()para patrones anclados al inicio. - Usa
re.search()para búsqueda global. - Usa
re.findall()para extraer todas las coincidencias. - Aplica flags (ej.
re.IGNORECASE,re.MULTILINE) para ajustar comportamiento. - Recuerda testear patrones con Regex101 o herramientas similares antes de desplegar.
python
- Domine el Método strip() de Python: Guía Completa y Ejemplos Prácticos
- Domine str.count() en Python: Cómo Contar Caracteres y Subcadenas con Ejemplos
- Domine el Formateo de Strings en Python con format(): Ejemplos Claros
- Python len(): Guía Práctica para Medir Longitud de Objetos
- Domine el Método String.find() en Python: Sintaxis, Ejemplos y Alternativas
- Función round() en Python explicada con ejemplos prácticos
- Dominando la función map() de Python: sintaxis, ejemplos y mejores prácticas
- Python timeit(): medición de tiempo de ejecución con ejemplos prácticos
- Counter de collections en Python: conteo eficiente, actualización y operaciones aritméticas
- Python list.count(): Guía Experta con Ejemplos Prácticos
- Python list.index(): Cómo Encontrar Posiciones de Elementos con Ejemplos Prácticos