Saltar al contenido

Python RegEx

Las expresiones regulares (regex) son una herramienta poderosa para el procesamiento de texto en Python. Te permiten buscar, reemplazar y extraer patrones del texto de manera eficiente. Esta guía cubre la sintaxis básica de las expresiones regulares y las funciones más utilizadas del módulo re de Python.

Sintaxis básica

Las expresiones regulares combinan metacaracteres y caracteres literales. Los metacaracteres tienen significados especiales. Por ejemplo, el punto (.) coincide con cualquier carácter excepto una nueva línea, mientras que el asterisco (*) coincide con cero o más ocurrencias del carácter precedente. Los caracteres literales coinciden exactamente consigo mismos. Por ejemplo, el patrón hello coincide con la cadena "hello".

Nota sobre cadenas raw: Los patrones de regex normalmente se escriben como cadenas raw (con prefijo r, por ejemplo, r'\d+'). Esto le indica a Python que no interprete las barras invertidas como caracteres de escape, lo cual es esencial para la sintaxis de regex como \d, \w o \s.

Cuantificadores

Los cuantificadores especifican cuántas veces debe coincidir un patrón. Los cuantificadores más utilizados son:

  • * coincide con cero o más ocurrencias del carácter o grupo precedente.
  • + coincide con una o más ocurrencias del carácter o grupo precedente.
  • ? coincide con cero o una ocurrencia del carácter o grupo precedente.
  • {} especifica un número exacto o un rango de ocurrencias del carácter o grupo precedente.
python
import re
print(re.findall(r'a*', 'baaa'))  # ['', 'aaa', '']
print(re.findall(r'a+', 'baaa'))  # ['aaaa']
print(re.findall(r'a?', 'baaa'))  # ['', 'a', 'a', 'a', '']
print(re.findall(r'a{3}', 'baaa')) # ['aaa']

Clases de caracteres

Las clases de caracteres coinciden con cualquier carácter de un conjunto especificado. Por ejemplo, [aeiou] coincide con cualquier vocal, y [0-9] coincide con cualquier dígito.

python
import re
print(re.findall(r'[aeiou]', 'hello'))  # ['e', 'o']
print(re.findall(r'[0-9]', 'a1b2c3'))   # ['1', '2', '3']

Anclas

Las anclas especifican la posición de un patrón en el texto. Las anclas más utilizadas son:

  • ^ coincide con el inicio de una cadena.
  • $ coincide con el final de una cadena.
python
import re
print(re.findall(r'^Python', 'Python is great'))  # ['Python']
print(re.findall(r'great$', 'Python is great'))   # ['great']

Grupos

Los grupos capturan subpatrones para su posterior extracción. Puedes usarlos para extraer partes específicas de una cadena. Por ejemplo, el patrón (\d+)-(\d+)-(\d+) coincide con una fecha en formato YYYY-MM-DD y captura el año, el mes y el día.

python
import re
match = re.search(r'(\d{4})-(\d{2})-(\d{2})', '2023-10-05')
if match:
    print(match.groups())  # ('2023', '10', '05')

El módulo re

El módulo re proporciona funciones para trabajar con expresiones regulares en Python. Las funciones más utilizadas son:

  • re.search() busca un patrón y devuelve el primer objeto de coincidencia.
  • re.findall() busca todas las ocurrencias y devuelve una lista de coincidencias.
  • re.sub() reemplaza todas las ocurrencias de un patrón con una cadena especificada.
  • re.split() divide una cadena según las ocurrencias de un patrón.

También puedes modificar el comportamiento de coincidencia utilizando banderas. Por ejemplo, re.IGNORECASE hace que el patrón no distinga entre mayúsculas y minúsculas.

python
import re
text = 'apple banana apple'
print(re.search(r'banana', text))          # <re.Match object; span=(6, 12), match='banana'>
print(re.findall(r'apple', text))         # ['apple', 'apple']
print(re.sub(r'apple', 'orange', text))   # 'orange banana orange'
print(re.split(r'\s+', 'one two three'))  # ['one', 'two', 'three']
print(re.findall(r'python', 'Python is great', re.IGNORECASE))  # ['Python']

Conclusión

Las expresiones regulares son una herramienta poderosa para el procesamiento de texto en Python. Combinadas con el módulo re, te permiten manejar tareas complejas de manipulación de texto de manera eficiente. Esta guía cubrió la sintaxis central y las funciones esenciales para que comiences.

Práctica

¿Cuál es la función del módulo 're' en Python?

¿Te resulta útil?

Vista previa dual-run — compárala con las rutas Symfony en producción.