Saltar al contenido
Regex con Python

Cuantificadores: repetición y rangos

Introducción

En el mundo de las expresiones regulares, los cuantificadores son herramientas poderosas para hacer coincidir patrones repetitivos en cadenas de texto. Estos cuantificadores permiten especificar cuántas veces una letra o grupo de letras deben aparecer en la cadena para que haya una coincidencia.

Hay dos tipos principales de cuantificadores: los de repetición y los de rangos. Los cuantificadores de repetición, como el '+' y el '*', indican que la letra o grupo de letras inmediatamente anterior debe aparecer uno o más veces (+) o ninguna o más veces (*) en la cadena. Por otro lado, los cuantificadores de rangos, como '{m,n}' o '{m,}', permiten especificar un rango de apariciones permitidas para la letra o grupo de letras anterior.

Por ejemplo, '{2,5}' significa que la letra o grupo de letras debe aparecer al menos dos y hasta cinco veces en la cadena. Los cuantificadores son herramientas esenciales en la creación de expresiones regulares eficaces y precisas, lo que a su vez permite una mejor manipulación y extracción de información valiosa en cadenas de texto.

Resumen

Los cuantificadores son una parte importante de las expresiones regulares y nos permiten indicar cuántas veces un elemento o conjunto de elementos debe aparecer en una cadena. Hay dos tipos principales de cuantificadores: los de repetición y los de rango.

Los cuantificadores de repetición se utilizan para indicar la cantidad exacta de veces que un elemento debe aparecer. 

- El signo "+" indica que el elemento anterior debe aparecer uno o más veces. Por ejemplo, la expresión regular "ab+" coincidirá con "ab", "abb", "abbb", y así sucesivamente.

- El signo "*" indica que el elemento anterior debe aparecer cero o más veces. Por ejemplo, la expresión regular "ab*" coincidirá con "a", "ab", "abb", "abbb", y así sucesivamente.

- El signo "?" indica que el elemento anterior debe aparecer cero o una sola vez. Por ejemplo, la expresión regular "ab?" coincidirá con "a" y "ab".

- Las llaves "{}" nos permiten especificar un número exacto de veces que un elemento debe aparecer. Por ejemplo, la expresión regular "a{3}" coincidirá con "aaa". Los cuantificadores de rango nos permiten indicar un rango de veces que un elemento debe aparecer en una cadena. 

- El signo "{m,n}" nos permite definir el mínimo y máximo número de veces que un elemento debe aparecer. Por ejemplo, la expresión regular "a{2,4}" coincidirá con "aa", "aaa" y "aaaa".

- El signo "{m,}" nos permite indicar que el elemento anterior se debe repetir al menos m veces. Por ejemplo, la expresión regular "a{3,}" coincidirá con "aaa", "aaaa", "aaaaa" y así sucesivamente.

- El signo "{,n}" nos permite indicar que el elemento anterior se debe repetir como máximo n veces. Por ejemplo, la expresión regular "a{,3}" coincidirá con "", "a", "aa" y "aaa".

En resumen, los cuantificadores son una parte fundamental de las expresiones regulares ya que nos permiten buscar patrones específicos en una cadena, y los cuantificadores de repetición y rango son herramientas útiles para definir la cantidad de veces que un elemento o conjunto de elementos debe aparecer.

Aplicación teórica

Supongamos que queremos validar si una cadena de texto cumple con el siguiente patrón: una combinación de letras "a" o "b", seguido de dos dígitos. Podemos usar los cuantificadores para indicar que queremos repetir la letra "a" o "b" una o más veces, y que los dos dígitos deben ser exactamente dos dígitos.

En este caso, podemos usar los siguientes operadores de cuantificación:

- **+**: Indica que el carácter anterior debe aparecer al menos una vez.

- **{n}**: Indica que el carácter anterior debe aparecer exactamente n veces.

- **{n, m}**: Indica que el carácter anterior debe aparecer al menos n veces y como máximo m veces. Con estos operadores, podemos construir la expresión regular para nuestro patrón:


import re 
texto = "aa12 b3456 aa0" 
patron = r'[ab]+[0-9]{2}' 
resultado = re.findall(patron, texto) 
print(resultado)

Este código buscará en la cadena de texto toda secuencia de caracteres que:

- Comience con una o más letras "a" o "b". (Esto es lo que indica "[ab]+")

- Seguidas de dos dígitos. (Esto es lo que indica "[0-9]{2}")

En este ejemplo, la variable "texto" contiene "aa12 b3456 aa0". La expresión regular encontrará dos patrones que coinciden con el patrón que buscamos: "aa12" y "b3456". Espero que este ejemplo te haya ayudado a entender cómo funcionan los cuantificadores en las expresiones regulares con Python. 

Aplicación práctica

Los cuantificadores indican la cantidad de veces que se debe repetir un caracter o un conjunto de caracteres en una expresión regular. En Python, los cuantificadores se escriben después de los caracteres o conjuntos de caracteres que deben repetirse.

Los cuantificadores en Python incluyen:

- `*`: el asterisco indica que el caracter anterior puede aparecer cero o más veces.

- `+`: el signo más indica que el caracter anterior debe aparecer al menos una vez.

- `?`: el signo de interrogación indica que el caracter anterior puede aparecer cero o una vez.

- `{n}`: las llaves indican que el caracter anterior debe aparecer exactamente n veces.

- `{n,m}`: las llaves indican que el caracter anterior debe aparecer al menos n veces y como máximo m veces.

- `{n,}`: las llaves indican que el caracter anterior debe aparecer al menos n veces.

Aquí te dejo un ejemplo práctico de cada uno:


import re 
# *: cero o más veces 
texto1 = "aaaaa" 
texto2 = "bb" 
patron = r"a*" 
print(re.findall(patron, texto1)) 
# output: ['aaaaa', ''] 
print(re.findall(patron, texto2)) 
# output: ['', ''] 
# +: una o más veces 
texto3 = "ab" 
patron = r"a+" print(re.findall(patron, texto3)) 

# output: ['a'] 
# ?: cero o una vez 
texto4 = "a" 
texto5 = "b" 
patron = r"a?" 
print(re.findall(patron, texto4)) 
# output: ['a', ''] 
print(re.findall(patron, texto5)) 
# output: ['', 'b'] 
# {n}: exactamente n veces 
texto6 = "aaaaa" patron = r"a{2}" 
print(re.findall(patron, texto6)) 
# output: ['aa'] 
# {n,m}: al menos n, como máximo m veces 
texto7 = "aaabbb" 
patron = r"a{2,3}" 
print(re.findall(patron, texto7)) 
# output: ['aaa'] 
# {n,}: n o más veces 
texto8 = "aaa" 
patron = r"a{2,}" 
print(re.findall(patron, texto8)) 
# output: ['aaa'] 

Espero que esto te haya ayudado a entender un poco más sobre los cuantificadores y cómo se utilizan en Python con expresiones regulares.