Python Regex: coincidencia de patrones con el módulo re

Dominar las expresiones regulares (Regex) en Python. Aprenda a buscar, unir, dividir y sustituir datos de cadenas utilizando la biblioteca re incorporada.

Pruébelo en el editor

Descripción general

Las expresiones regulares (a menudo abreviadas como expresiones regulares) son un minilenguaje que se utiliza para la búsqueda avanzada de texto, la coincidencia de cadenas y la manipulación. En lugar de comprobar valores de cadenas simples, las expresiones regulares le permiten definir patrones complejos para buscar dentro de cuerpos de texto masivos. Por ejemplo, encontrar todas las direcciones de correo electrónico, números de teléfono o URL en un documento es sencillo de expresar en expresiones regulares, pero increíblemente complejo de escribir utilizando métodos de cadenas normales.

Python proporciona soporte integrado para expresiones regulares a través del módulo `re`. El módulo incluye funciones críticas como `re.search()` para encontrar la primera coincidencia, `re.findall()` para recuperar todas las subcadenas coincidentes como una lista y `re.finditer()` para iterar sobre los objetos coincidentes. Cada objeto coincidente proporciona metadatos, como el índice de posición inicial y final exacto de la subcadena coincidente y el texto coincidente en sí.

Los patrones de expresiones regulares utilizan metacaracteres especiales: `\d` coincide con cualquier dígito, `\w` coincide con caracteres alfanuméricos, `+` coincide con una o más repeticiones y los corchetes `[...]` definen conjuntos de caracteres. Agrupar entre paréntesis `(...)` le permite extraer partes específicas de un patrón. Además, `re.sub()` te permite buscar un patrón y reemplazarlo con una nueva cadena. Aunque las expresiones regulares tienen una curva de aprendizaje pronunciada, dominarlas le proporciona una herramienta increíblemente rápida y versátil para el procesamiento de texto.

Código y salida de ejecución

Usar el módulo re para validar y extraer componentes de una dirección de correo electrónico.

import re

text = "Contact support at info@pyrun.xyz or developer@pyrun.xyz today."

# Pattern to match email addresses
email_pattern = r"([a-zA-Z0-9._%+-]+)@([a-zA-Z0-9.-]+\.[a-zA-Z]{2,})"

# Find all matches
emails = re.findall(email_pattern, text)
print("Emails found:")
for user, domain in emails:
    print(f"User: {user} | Domain: {domain}")

# Redacting emails using re.sub
redacted_text = re.sub(email_pattern, "[REDACTED]", text)
print(f"\nRedacted Text:\n{redacted_text}")
Salida terminal
Emails found:
User: info | Domain: pyrun.xyz
User: developer | Domain: pyrun.xyz

Redacted Text:
Contact support at [REDACTED] or [REDACTED] today.

Implementación paso a paso

  • Validar entradas de formato (correos electrónicos, teléfonos, contraseñas)
  • Análisis de registros de acceso al servidor para códigos de estado
  • Extracción de información de HTML sin formato e informes de rebajas

Preguntas frecuentes

¿Cuál es el significado del prefijo 'r' en los patrones de expresiones regulares?

Denota una "cadena sin formato". Las cadenas sin formato tratan las barras invertidas (\) como caracteres literales en lugar de caracteres de escape, evitando conflictos de sintaxis con comodines de expresiones regulares.

¿Cuál es la diferencia entre re.match y re.search?

re.match solo busca una coincidencia comenzando desde el principio de la cadena, mientras que re.search escanea toda la cadena en busca de una coincidencia.

Temas relacionados

Recursos recomendados de Python

Amplíe sus conocimientos con tutoriales interactivos relacionados, hojas de trucos y comparaciones de códigos.