Expresiones regulares en Python

Las expresiones regulares (también conocidas como regex) son una herramienta poderosa para manipular y buscar cadenas de texto. En Python, se puede utilizar el módulo re para trabajar con expresiones regulares.

Una expresión regular es una secuencia de caracteres que define un patrón de búsqueda. Por ejemplo, si queremos buscar todas las palabras que comienzan con la letra “a” en una cadena, podemos utilizar la expresión regular ^a\w*. Esta expresión regular significa “una cadena que comienza con la letra ‘a’ seguida de cero o más caracteres de palabra”.

Para utilizar expresiones regulares en Python, primero debemos importar el módulo re. A continuación, podemos utilizar la función re.search() para buscar una cadena que coincida con nuestro patrón.

Por ejemplo:


import re

texto = "Hola, ¿cómo estás?"
patron = r"\bestás\b"

if re.search(patron, texto):
    print("Se encontró una coincidencia")
else:
    print("No se encontraron coincidencias")

Lenguaje del código: Python (python)

En este ejemplo, utilizamos la expresión regular \bestás\b para buscar la palabra “estás” en la cadena texto. La expresión regular utiliza el metacaracter \b para delimitar la palabra, lo que significa que solo se buscará la palabra “estás” y no se encontrará una coincidencia en “estásen” o “contestás”.

También usamos la letra “r” antes de la cadena de expresión regular, lo que indica que es una “cadena sin procesar” (raw string en inglés) para que los caracteres escapados, como el backslash, no sean interpretados como caracteres especiales.

Funciones de RegEx

En Python, el módulo re proporciona una variedad de funciones para trabajar con expresiones regulares. Algunas de las funciones más utilizadas son las siguientes:

  • re.search(): Busca la primera ocurrencia de un patrón en una cadena y devuelve un objeto “match” que contiene información sobre la coincidencia.
  • re.match(): Busca un patrón al principio de una cadena y devuelve un objeto “match” si hay una coincidencia.
  • re.findall(): Busca todas las ocurrencias de un patrón en una cadena y devuelve una lista de cadenas que coinciden.
  • re.finditer(): Busca todas las ocurrencias de un patrón en una cadena y devuelve un iterador que produce objetos “match” para cada coincidencia.
  • re.split(): Divide una cadena en una lista de cadenas utilizando un patrón como separador.
  • re.sub(): Busca todas las ocurrencias de un patrón en una cadena y las reemplaza con otra cadena.
  • re.compile(): Compila una expresión regular en un objeto “pattern” que se puede reutilizar en múltiples búsquedas.

Además de estas funciones, el módulo re también proporciona una serie de métodos de objeto “match” para trabajar con los resultados de las búsquedas, como group(), start(), end(), y span(), que permiten acceder a la cadena de coincidencia, la posición de inicio y final de la coincidencia, y el rango de la coincidencia, respectivamente.

Metacaracteres

Los metacaracteres son caracteres especiales que tienen un significado especial en las expresiones regulares y se utilizan para definir patrones de búsqueda.

Aquí hay algunos metacaracteres comunes que se pueden utilizar en las expresiones regulares de Python:

  • . (punto): coincide con cualquier carácter excepto nueva línea.
  • ^ (circunflejo): coincide con el comienzo de una cadena.
  • $ (signo de dólar): coincide con el final de una cadena.
  • * (asterisco): coincide con cero o más repeticiones del carácter o grupo anterior.
  • + (signo más): coincide con una o más repeticiones del carácter o grupo anterior.
  • ? (signo de interrogación): coincide con cero o una repetición del carácter o grupo anterior.
  • | (barra vertical): se utiliza para alternar entre dos o más patrones.
  • [] (corchetes): se utiliza para definir un conjunto de caracteres que se pueden utilizar en una posición determinada.
  • () (paréntesis): se utiliza para agrupar caracteres o patrones y aplicar operadores a todo el grupo.
  • \ (barra invertida): se utiliza para escapar caracteres especiales y para crear caracteres especiales como \d para cualquier dígito, \s para cualquier espacio en blanco, y \w para cualquier carácter alfanumérico.

Estos son solo algunos de los metacaracteres disponibles en las expresiones regulares de Python. Para utilizarlos en una expresión regular, simplemente colóquelos en la cadena de patrón donde se desea que se apliquen.

Secuencias Especiales

Además de los metacaracteres, las expresiones regulares de Python también tienen secuencias especiales, que son secuencias predefinidas que se pueden utilizar para coincidir con caracteres especiales o conjuntos de caracteres.

Aquí hay algunos ejemplos de secuencias especiales comunes en Python:

  1. \t: Representa un carácter de tabulación.
  2. \n: Representa un carácter de nueva línea.
  3. \r: Representa un carácter de retorno de carro.
  4. \s: Representa cualquier carácter de espacio en blanco, incluyendo espacios, tabulaciones y caracteres de nueva línea.
  5. \S: Representa cualquier carácter que no sea un espacio en blanco.
  6. \d: Representa cualquier dígito de 0 a 9.
  7. \D: Representa cualquier carácter que no sea un dígito.
  8. \w: Representa cualquier carácter alfanumérico, incluyendo letras, números y guiones bajos.
  9. \W: Representa cualquier carácter que no sea alfanumérico.
  10. \b: Representa un límite de palabra, es decir, el límite entre un carácter de palabra y un carácter que no es una palabra.
  11. \B: Representa cualquier posición que no sea un límite de palabra.

Además de estas secuencias especiales, también existen algunas secuencias especiales que representan caracteres especiales comunes, como los paréntesis, los corchetes y las llaves. Estas secuencias especiales incluyen \(, \), \[, \], \{ y \}.

Conjuntos

En las expresiones regulares de Python, los conjuntos se utilizan para representar un conjunto de caracteres que se pueden utilizar en una posición determinada. Un conjunto se define utilizando corchetes [] y puede contener cualquier número de caracteres individuales, rangos de caracteres y secuencias especiales. Aquí están algunos de los conjuntos más comunes:

  1. [abc]: Coincide con cualquier carácter que sea ‘a’, ‘b’ o ‘c’.
  2. [a-z]: Coincide con cualquier carácter entre ‘a’ y ‘z’ (es decir, todas las letras minúsculas).
  3. [A-Z]: Coincide con cualquier carácter entre ‘A’ y ‘Z’ (es decir, todas las letras mayúsculas).
  4. [0-9]: Coincide con cualquier dígito de 0 a 9.
  5. [a-zA-Z0-9]: Coincide con cualquier carácter alfanumérico (es decir, todas las letras y dígitos).
  6. [^abc]: Coincide con cualquier carácter que no sea ‘a’, ‘b’ o ‘c’.
  7. [^a-z]: Coincide con cualquier carácter que no sea una letra minúscula.
  8. [^A-Z]: Coincide con cualquier carácter que no sea una letra mayúscula.
  9. [^0-9]: Coincide con cualquier carácter que no sea un dígito.
  10. [\s]: Coincide con cualquier carácter de espacio en blanco (incluyendo espacios, tabulaciones y caracteres de nueva línea).
  11. [\S]: Coincide con cualquier carácter que no sea un espacio en blanco.
  12. [\d]: Coincide con cualquier dígito de 0 a 9.
  13. [\D]: Coincide con cualquier carácter que no sea un dígito.
  14. [\w]: Coincide con cualquier carácter alfanumérico (es decir, todas las letras y dígitos).
  15. [\W]: Coincide con cualquier carácter que no sea alfanumérico.

Además de estos conjuntos, también se pueden utilizar secuencias especiales y rangos de caracteres para definir conjuntos más complejos.

Los conjuntos son una herramienta muy útil en las expresiones regulares de Python, ya que permiten definir patrones de búsqueda más complejos que pueden encontrar una variedad de caracteres diferentes en una cadena.

La función search()

La función search() es una función del módulo re de Python que se utiliza para buscar una cadena de texto para ver si contiene una coincidencia con una expresión regular dada.

La función busca la primera coincidencia de la expresión regular en la cadena y devuelve un objeto “match” que contiene información sobre la coincidencia. Si no se encuentra ninguna coincidencia, la función devuelve None.

La sintaxis básica de la función search() es la siguiente:


re.search(expresion_regular, cadena_de_texto)

Lenguaje del código: Python (python)

Donde expresion_regular es la expresión regular que se utilizará para buscar la cadena de texto y cadena_de_texto es la cadena de texto que se va a buscar.

Por ejemplo, el siguiente código utiliza la función search() para buscar una cadena de texto para ver si contiene un número de teléfono con el formato (XXX) XXX-XXXX:


import re

texto = "Mi número de teléfono es (123) 456-7890"
patron = r"\(\d{3}\) \d{3}-\d{4}"

resultado = re.search(patron, texto)

if resultado:
    print("Se encontró un número de teléfono")
else:
    print("No se encontró ningún número de teléfono")

Lenguaje del código: Python (python)

En este ejemplo, la expresión regular r"\(\d{3}\) \d{3}-\d{4}" se utiliza para buscar el patrón (XXX) XXX-XXXX en la cadena de texto texto. La expresión regular utiliza secuencias especiales como \d para representar cualquier dígito y paréntesis y guiones para representar los caracteres literales del patrón.

La función search() busca la cadena de texto para ver si contiene este patrón, y el resultado se almacena en la variable resultado. Si se encuentra una coincidencia, el código imprime “Se encontró un número de teléfono”, de lo contrario imprime “No se encontró ningún número de teléfono”.

La función march()

La función match() es una función del módulo re de Python que se utiliza para buscar una cadena de texto para ver si comienza con una coincidencia con una expresión regular dada.

La función busca la expresión regular solo al principio de la cadena y devuelve un objeto “match” que contiene información sobre la coincidencia. Si no se encuentra ninguna coincidencia, la función devuelve None.

La sintaxis básica de la función match() es la siguiente:


re.match(expresion_regular, cadena_de_texto)

Lenguaje del código: Python (python)

Donde expresion_regular es la expresión regular que se utilizará para buscar la cadena de texto y cadena_de_texto es la cadena de texto que se va a buscar.

Por ejemplo, el siguiente código utiliza la función match() para buscar una cadena de texto para ver si comienza con la palabra “Hola”:


import re

texto = "Hola, ¿cómo estás?"
patron = r"Hola"

resultado = re.match(patron, texto)

if resultado:
    print("La cadena comienza con la palabra 'Hola'")
else:
    print("La cadena no comienza con la palabra 'Hola'")

Lenguaje del código: Python (python)

En este ejemplo, la expresión regular r"Hola" se utiliza para buscar la palabra “Hola” al principio de la cadena de texto texto. La función match() busca la cadena de texto para ver si comienza con esta palabra, y el resultado se almacena en la variable resultado.

Si se encuentra una coincidencia, el código imprime “La cadena comienza con la palabra ‘Hola’”, de lo contrario imprime “La cadena no comienza con la palabra ‘Hola’”.

Es importante tener en cuenta que la función match() solo busca la expresión regular al principio de la cadena de texto. Si la coincidencia no está al principio de la cadena, la función no encontrará una coincidencia. Si se desea buscar en toda la cadena de texto, se puede utilizar la función search() en su lugar.

La función findall()

La función findall() es una función del módulo re de Python que se utiliza para buscar todas las ocurrencias de una expresión regular en una cadena de texto y devuelve una lista de cadenas que coinciden.

La función busca todas las coincidencias en la cadena de texto y devuelve una lista de todas las cadenas que coinciden con la expresión regular.

La sintaxis básica de la función findall() es la siguiente:


re.findall(expresion_regular, cadena_de_texto)

Lenguaje del código: Python (python)

Donde expresion_regular es la expresión regular que se utilizará para buscar la cadena de texto y cadena_de_texto es la cadena de texto que se va a buscar.

Por ejemplo, el siguiente código utiliza la función findall() para buscar todas las direcciones de correo electrónico en una cadena de texto:


import re

texto = "Mi correo es [email protected] y mi amigo tiene el correo [email protected]"
patron = r"\b\w+@\w+\.\w+\b"

resultados = re.findall(patron, texto)

print(resultados)

Lenguaje del código: Python (python)

En este ejemplo, la expresión regular r"\b\w+@\w+\.\w+\b" se utiliza para buscar todas las direcciones de correo electrónico en la cadena de texto texto. La expresión regular utiliza secuencias especiales como \w para representar cualquier carácter alfanumérico y la sintaxis de dirección de correo electrónico para buscar el patrón.

La función findall() busca la cadena de texto para ver todas las direcciones de correo electrónico que coinciden con este patrón, y el resultado se almacena en la variable resultados. El código imprime la lista de todas las direcciones de correo electrónico encontradas en la cadena de texto.

La función finditer()

La función finditer() es una función del módulo re de Python que se utiliza para buscar todas las ocurrencias de una expresión regular en una cadena de texto y devuelve un iterador que produce objetos “match” para cada coincidencia encontrada.

La función busca todas las coincidencias en la cadena de texto y devuelve un iterador que produce objetos «match» para cada coincidencia encontrada.

La sintaxis básica de la función finditer() es la siguiente:


re.finditer(expresion_regular, cadena_de_texto)

Lenguaje del código: Python (python)

Donde expresion_regular es la expresión regular que se utilizará para buscar la cadena de texto y cadena_de_texto es la cadena de texto que se va a buscar.

Por ejemplo, el siguiente código utiliza la función finditer() para buscar todas las direcciones de correo electrónico en una cadena de texto y muestra la posición de inicio y finalización de cada coincidencia:


import re

texto = "Mi correo es [email protected] y mi amigo tiene el correo [email protected]"
patron = r"\b\w+@\w+\.\w+\b"

for match in re.finditer(patron, texto):
    print("Se encontró una dirección de correo electrónico en la posición {}-{}".format(match.start(), match.end()))

Lenguaje del código: Python (python)

En este ejemplo, la expresión regular r"\b\w+@\w+\.\w+\b" se utiliza para buscar todas las direcciones de correo electrónico en la cadena de texto texto.

La función finditer() busca la cadena de texto para ver todas las direcciones de correo electrónico que coinciden con este patrón, y devuelve un iterador que produce objetos “match” para cada coincidencia encontrada.

El código recorre el iterador y para cada objeto “match” que produce, imprime la posición de inicio y finalización de la coincidencia.

La función split()

La función split() es una función del módulo re de Python que se utiliza para dividir una cadena de texto en una lista de subcadenas utilizando una expresión regular como separador.

La función busca todas las ocurrencias de la expresión regular en la cadena de texto y divide la cadena en cada punto de coincidencia, devolviendo una lista de las subcadenas resultantes.

La sintaxis básica de la función split() es la siguiente:


re.split(expresion_regular, cadena_de_texto)

Lenguaje del código: Python (python)

Donde expresion_regular es la expresión regular que se utilizará como separador y cadena_de_texto es la cadena de texto que se va a dividir.

Por ejemplo, el siguiente código utiliza la función split() para dividir una cadena de texto en palabras utilizando espacios y signos de puntuación como separadores:


import re

texto = "Este es un ejemplo, con signos de puntuación. ¿Funcionará?"
patron = r"\W+"

palabras = re.split(patron, texto)

print(palabras)

Lenguaje del código: Python (python)

En este ejemplo, la expresión regular r"\W+" se utiliza para buscar cualquier secuencia de uno o más caracteres que no sean alfanuméricos como separadores.

La función split() busca la cadena de texto para encontrar todas las ocurrencias de esta expresión regular y divide la cadena de texto en cada punto de coincidencia, devolviendo una lista de las subcadenas resultantes. El código imprime la lista de palabras resultante.

La función sub()

La función sub() es una función del módulo re de Python que se utiliza para reemplazar todas las ocurrencias de una expresión regular en una cadena de texto con otro texto.

La función busca todas las ocurrencias de la expresión regular en la cadena de texto y las reemplaza con el texto especificado, devolviendo una nueva cadena de texto.

La sintaxis básica de la función sub() es la siguiente:


re.sub(expresion_regular, texto_reemplazo, cadena_de_texto)

Lenguaje del código: Python (python)

Donde expresion_regular es la expresión regular que se utilizará para buscar en la cadena de texto, texto_reemplazo es el texto que se utilizará para reemplazar las ocurrencias de la expresión regular y cadena_de_texto es la cadena de texto que se va a buscar.

Por ejemplo, el siguiente código utiliza la función sub() para reemplazar todas las ocurrencias de la palabra “perro” con la palabra “gato” en una cadena de texto:


import re

texto = "El perro marrón saltó sobre el perro negro"
patron = r"perro"

texto_nuevo = re.sub(patron, "gato", texto)

print(texto_nuevo)

Lenguaje del código: Python (python)

En este ejemplo, la expresión regular r"perro" se utiliza para buscar la palabra “perro” en la cadena de texto texto.

La función sub() busca la cadena de texto para encontrar todas las ocurrencias de esta expresión regular y las reemplaza con la palabra “gato”, devolviendo una nueva cadena de texto que se almacena en la variable texto_nuevo. El código imprime la nueva cadena de texto.

La función compile()

La función compile() es una función del módulo re de Python que se utiliza para compilar una expresión regular en un objeto de patrón. Este objeto de patrón puede ser reutilizado para realizar búsquedas y manipulaciones en otras cadenas de texto.

La sintaxis básica de la función compile() es la siguiente:


re.compile(expresion_regular)

Lenguaje del código: Python (python)

donde expresion_regular es la expresión regular que se va a compilar.

Por ejemplo, el siguiente código utiliza la función compile() para compilar una expresión regular y luego utilizarla para buscar una cadena de texto:


import re

texto = "Mi número de teléfono es (123) 456-7890"
patron = re.compile(r"\(\d{3}\) \d{3}-\d{4}")

resultado = patron.search(texto)

if resultado:
    print("Se encontró un número de teléfono")
else:
    print("No se encontró ningún número de teléfono")

Lenguaje del código: Python (python)

En este ejemplo, la expresión regular r"\(\d{3}\) \d{3}-\d{4}" se compila en un objeto de patrón utilizando la función compile(). El objeto de patrón se almacena en la variable patron. Luego, se utiliza este objeto de patrón para buscar una cadena de texto utilizando el método search().

El resultado de la búsqueda se almacena en la variable resultado. Si se encuentra una coincidencia, el código imprime “Se encontró un número de teléfono”, de lo contrario imprime “No se encontró ningún número de teléfono”.

La función compile() es útil cuando se necesita utilizar la misma expresión regular varias veces en diferentes cadenas de texto. Compilar la expresión regular una vez y utilizar el objeto de patrón para realizar búsquedas y manipulaciones en diferentes cadenas de texto puede mejorar el rendimiento de su código.