Uso del módulo re en Python para expresiones regulares

Fundamentos de las expresiones regulares

Las expresiones regulares son patrones que permiten identificar y extraer secuencias específicas de texto. En Python, el módulo re ofrece funciones clave para trabajar con estos patrones de manera eficiente.

Caracteres meta esenciales

Los caracteres meta definen reglas de coincidencia. Por ejemplo, ^ indica el inicio de la cadena, $ el final, y . cualquier carácter excepto salto de línea (a menos que se use la bandera re.DOTALL). Los corchetes [abc] coinciden con caracteres individuales, mientras que [^abc] excluye esos caracteres.

Los cuantificadores como * (cero o más repeticiones), + (una o más), y ? (cero o una) controlan la repetición. Las llaves {n}, {n,}, y {n,m} especifican repeticiones exactas o rangos.

Secuencias de escape como \d para dígitos, \w para caracteres alfanuméricos, y \s para espacios en blanco simplifican patrones comunes.

Funciones principales del módulo re

re.findall()

Esta función devuelve una lista con todas las coincidencias del patrón en la cadena. Ejemplo con un patrón de 8 dígitos:

import re

cadena_texto = 'Referencia: 12345678, Otro: 87654321'
expresion_regular = r'\d{8}'  # Buscar secuencias de ocho dígitos
resultados = re.findall(expresion_regular, cadena_texto)
print(resultados)  # Salida: ['12345678', '87654321']

re.search()

Busca la primera coincidencia del patrón y devuelve un objeto de coincidencia si existe. Ejemplo:

import re

texto_datos = 'ID: 456, Código: 78901'
patron_busqueda = r'\d{3,5}'
coincidencia = re.search(patron_busqueda, texto_datos)
if coincidencia:
    print(coincidencia.group())  # Salida: '456'

re.match()

Comprueba si el patrón coincide al inicio de la cadena. Ejemplo con un patrón complejo:

import re

entrada = 'Usuario: María Edad: 32 Teléfono: 911223344'
regla = 'Usuario: \\w+ Edad: \\d+ Teléfono: \\d{9}'
resultado_match = re.match(regla, entrada)
if resultado_match:
    print(resultado_match.group())  # Salida completa coincidente

Uso de grupos para extracción

Los grupos con paréntesis permiten capturar partes específicas del patrón. Ejemplo:

import re

datos = 'Nombre: Carlos, Edad: 45, Email: carlos@ejemplo.com'
patron_grupos = 'Nombre: (\\w+), Edad: (\\d+), Email: (\\S+)'
resultado_grupo = re.match(patron_grupos, datos)
if resultado_grupo:
    print(resultado_grupo.group(1))  # Carlos
    print(resultado_grupo.group(2))  # 45

Se pueden asignar nombres a los grupos usando la sintaxis (?P<nombre>expresión) para mayor clariadd.

Compilación de patrones con re.compile()

Para reutilizar patrones frecuantes, se pueden compilar previamente. Ejemplo:

import re

patron_compilado = re.compile(r'Nombre: (?P<nombre>\\w+)')
cadena = 'Nombre: Luis'
res = patron_compilado.match(cadena)
if res:
    print(res.group('nombre'))  # Luis

Sustitución con re.sub()

re.sub() reemplaza coincidencias en una cadena, ofreciendo más flexibilidad que métodos simples de reemplazo. Ejemplo:

import re

texto_original = 'Valor: 12345, Otro: 67890'
patron_sustituir = r'\d{5}'
texto_modificado = re.sub(patron_sustituir, 'XXXXX', texto_original)
print(texto_modificado)  # Salida: 'Valor: XXXXX, Otro: XXXXX'

Modos de coincidencia multilínea

Las banderas como re.M permiten tratar cada línea por separado, mientras que re.S hace que el punto coincida con todos los caracteres, incluyendo saltos de línea.

Coincidencias codiciosas y no codiciosas

Por defecto, los cuantificadores son codiciosos, buscando la coincidencia más larga posible. Al añadir ?, se vuelven no codiciosos, buscando la más corta. Ejemplo con múltiples nombres:

import re

cadena_ejemplo = '''Nombre: Ana Edad: 29 Teléfono: 999888777 Nombre: Pedro Edad: 41 Teléfono: 111222333'''
patron_codicioso = 'Nombre: (.*) Edad'
print('Codicioso:', re.findall(patron_codicioso, cadena_ejemplo))
patron_no_codicioso = 'Nombre: (.*?) Edad'
print('No codicioso:', re.findall(patron_no_codicioso, cadena_ejemplo))

La salida muestra cómo el modo codicioso captura texto adicional, mientras el no codicioso se limita a la primera ocurrencia.

Etiquetas: Python Regex re module Pattern Matching

Publicado el 7-20 04:53