Repeticiones de expresiones regulares en Python

En posts anteriores hemos explicado cómo trabajar con expresiones regulares en Python. Sin embargo, solamente hemos tratado el caso de que el patrón aparezca solamente una vez dentro de una cadena de texto dada. Para ampliar, en esta ocasión consideraremos otros casos puntuales. En particular, veremos cómo tener en cuenta las repeticiones de expresiones regulares en Python. ¡Comencemos!

Repeticiones de expresiones regulares

Los siguientes casos representan las distintas alternativas que se pueden presentar. A continuación, mostraremos el código a considerar, cuyo resultado puede observarse en la Fig. 1 al final. Recordemos que debemos importar el módulo re como primer paso.

Caso 1 – Cero o una repetición

Para empezar, encerremos el patrón entre paréntesis, seguidos del signo de pregunta ?. De esta manera, los dos primeros ejemplos cumplen la condición mientras que el tercero no:

# Caso 1, Ejemplo A
cuRegex = re.compile(r'va(cu)?no')
mo = cuRegex.search('El ganado vacuno es el conjunto de vacas, toros y bueyes.')
mo.group()
# Caso 1, Ejemplo B
mo = cuRegex.search('Esperé en vano una respuesta.')
mo.group()
# Caso 1, Ejemplo C. El matching object (mo) es None debido a que el patrón se repite dos veces:
mo = cuRegex.search('Esperé en vacucuno una respuesta.')
mo == None

Caso 2 – Cero o más repeticiones

En este caso utilizamos el asterisco * en reemplazo del signo de interrogación. En este escenario, el último ejemplo del caso anterior cumple la condición especificada:

# Caso 2, Ejemplo A
cuRegex = re.compile(r'va(cu)*no')
mo = cuRegex.search('Esperé en vacucuno una respuesta.')
mo.group()

Caso 3 – Al menos una ocurrencia

Si queremos garantizar que el patrón de búsqueda aparezca al menos una vez, utilizaremos el signo +. Como consecuencia, el ejemplo A del Caso 1 cumplirá la condición pero el ejemplo B no lo hará:

# Caso 3, Ejemplo A
cuRegex = re.compile(r'va(cu)+no')
mo = cuRegex.search('El ganado vacuno es el conjunto de vacas, toros y bueyes.')
mo.group()
# Caso 3, Ejemplo B
mo = cuRegex.search('Esperé en vano una respuesta.')
mo == None

Finalmente, veamos los resultados de los casos anteriores en la Fig. 1 a continuación:

Repeticiones de expresiones regulares: casos y ejemplos
Figura 1 – Repeticiones de expresiones regulares: casos y ejemplos

Espero que este post les haya resultado útil. ¡Nos leemos en breve!