Las ex­pre­sio­nes regulares, abreviado RegEx, se pueden utilizar en Python después de importar el paquete in­co­r­po­ra­do “re” para buscar ciertos patrones dentro de cadenas de ca­ra­c­te­res.

¿Qué son exac­ta­me­n­te las RegEx en Python?

RegEx hace re­fe­re­n­cia a las ex­pre­sio­nes regulares. Son cadenas de ca­ra­c­te­res que definen patrones de búsqueda es­pe­cí­fi­cos. Pueden usarse para comprobar strings de Python en busca de estos patrones. Las RegEx de Python siguen su propia sintaxis y semántica.

Nota

Las ex­pre­sio­nes regulares pe­r­te­ne­cen a un co­n­s­tru­c­to de pro­gra­ma­ción más avanzada tratada en detalle por algunos tu­to­ria­les de Python. Si te interesan otros temas avanzados de pro­gra­ma­ción en Python, estos artículos pueden ayudarte:

Áreas de apli­ca­ción de las RegEx de Python

Las ex­pre­sio­nes regulares se utilizan a menudo para examinar las entradas de los usuarios de un programa en busca de un formato es­pe­cí­fi­co.

Un ejemplo bien conocido de esto, que se­gu­ra­me­n­te te resulte familiar, es crear una co­n­tra­se­ña que debe contener al menos una letra mayúscula y un dígito. Las RegEx de Python se pueden utilizar para comprobar que lo escrito por el usuario cumple la regla.

Las ex­pre­sio­nes regulares también se utilizan con fre­cue­n­cia al rellenar fo­r­mu­la­rios web para comprobar la validez de las entradas de los usuarios. Por ejemplo, se puede evaluar si una dirección de correo ele­c­tró­ni­co in­tro­du­ci­da tiene un formato válido.

Consejo

Si estás tra­ba­ja­n­do con Python para un proyecto web, las ex­pre­sio­nes regulares te ayudarán de muchas formas. También es útil Deploy Now de IONOS, que te permite construir e im­ple­me­n­tar tus proyectos web di­re­c­ta­me­n­te a través de GitHub.

Sintaxis y semántica de las RegEx en Python

Los llamados me­ta­ca­ra­c­te­res se utilizan dentro de las ex­pre­sio­nes regulares. Son ca­ra­c­te­res que tienen un si­g­ni­fi­ca­do es­pe­cí­fi­co dentro de las RegEx de Python. Puedes encontrar los me­ta­ca­ra­c­te­res más im­po­r­ta­n­tes, in­clu­ye­n­do su si­g­ni­fi­ca­do y un ejemplo, en la siguiente tabla:

Carácter De­s­cri­p­ción Ejemplo
. Re­pre­se­n­ta cualquier carácter excepto nueva línea “ho.a” -> busca todas las cadenas que terminen en “ho” seguido de un carácter cua­l­quie­ra seguido de “a”, por ejemplo “hola”
[] Busca todas las letras es­pe­ci­fi­ca­das entre los corchetes “[a-e]” -> busca todas las letras mi­nú­s­cu­las entre a y e
^ Comprueba si la cadena empieza por un carácter o cadena es­pe­ci­fi­ca­dos “^hola” -> comprueba si la cadena empieza por “hola”
$ Comprueba si la cadena termina con un carácter o cadena es­pe­ci­fi­ca­dos “$mundo” -> comprueba si la cadena termina con “mundo”
* Cero o más apa­ri­cio­nes de un carácter “a*” -> comprueba si la “a” aparece varias veces o ninguna
+ Una o varias apa­ri­cio­nes de un carácter “a+” -> comprueba si la “a” aparece como mínimo una vez
? Una o ninguna aparición de un carácter “a?” -> comprueba si la “a” aparece una vez o ninguna
{} Comprueba si un carácter aparece tantas veces como se es­pe­ci­fi­ca en las llaves “sil{2}a” -> coincide con la cadena “silla”

Sets

Los sets son muy im­po­r­ta­n­tes para la mayoría de los RegEx en Python, por lo que merece la pena pre­s­tar­les atención. Los sets son los patrones RegEx que comienzan y terminan con un corchete. Ya has visto un ejemplo de un set que encuentra todas las letras mi­nú­s­cu­las entre “a” y “e” en la tabla anterior. Abajo te ofrecemos una vista general de los usos comunes de los sets en las RegEx de Python.

Set De­s­cri­p­ción
[abc] Comprueba si uno de los ca­ra­c­te­res es­pe­ci­fi­ca­dos entre los corchetes (es decir, a, b o c) aparece dentro de una cadena.
[^abc] Comprueba todos los ca­ra­c­te­res no es­pe­ci­fi­ca­dos entre los corchetes
[a-z] Comprueba todas las letras mi­nú­s­cu­las entre “a” y “z”
[a-zA-Z] Comprueba todas las letras co­m­pre­n­di­das entre la “a” y la “z”, in­de­pe­n­die­n­te­me­n­te de que sean ma­yú­s­cu­las o mi­nú­s­cu­las
[0-9] Comprueba cualquier número entre 0 y 9
[1-5][0-9] Comprueba todos los números de dos cifras entre 10 y 59

Como puedes ver, los sets son una potente he­rra­mie­n­ta para diversas ex­pre­sio­nes regulares. Al utilizar sets, sin embargo, es im­po­r­ta­n­te tener en cuenta que los me­ta­ca­ra­c­te­res pre­se­n­ta­dos an­te­rio­r­me­n­te no tienen ningún si­g­ni­fi­ca­do es­pe­cí­fi­co dentro de los corchetes. Así, el set [] coin­ci­di­ría con todos los de una cadena dada.

Se­cue­n­cias

Además de los me­ta­ca­ra­c­te­res pre­se­n­ta­dos, con las RegEx de Python puedes hacer uso de se­cue­n­cias es­pe­cia­les y ya pre­de­fi­ni­das para crear patrones de búsqueda precisos.

Secuencia De­s­cri­p­ción Ejemplo
\A Comprueba si la cadena es­pe­ci­fi­ca­da se encuentra al principio de una cadena “\Alunes”
  • Coincide con “Lunes, martes y miércoles”.
  • No coincide con “Hoy es lunes”.
\b Comprueba si la cadena es­pe­ci­fi­ca­da se encuentra al principio o al final de una palabra “\bes”
  • Coincide con “Me gusta el estudio”.
  • Coincide con “Esencias de la India”.
  • No coincide con “La mesa del comedor”. “es\b”
  • Coincide con “Lunes”.
  • Coincide con “Los girasoles amarillos”.
  • No coincide con “Festival”.
\B Comprueba si la cadena es­pe­ci­fi­ca­da no se encuentra al principio o al final de una palabra; lo contrario de \b “\Bes”
  • No coincide con “Esencias de la India”.
  • No coincide con “Me gusta el estudio”.
  • Coincide con “Festival”. “es\B”
  • No coincide con “Lunes”.
  • No coincide con “Los girasoles amarillos”.
  • Coincide con “Festival”.
\d Comprueba los dígitos coin­ci­de­n­tes entre 0 y 9; equi­va­le­n­te a [0-9] “123”
  • \d busca tres coin­ci­de­n­cias para 1, 2 y 3
\D Comprueba todos los ca­ra­c­te­res que no sean dígitos; equi­va­le­n­te a [^0-9] “123acb&”
  • \D busca cuatro coin­ci­de­n­cias para a, c, b y &
\s Comprueba si la cadena contiene un carácter de espacio “Python RegEx”
  • \s coincide, ya que hay un espacio
\S Comprueba que la cadena no contenga espacios; lo contrario de \s “Python RegEx”
  • \S no coincide, ya que hay un espacio
\w Comprueba todos los ca­ra­c­te­res al­fa­nu­mé­ri­cos “1abc$%3”
  • \w busca cuatro coin­ci­de­n­cias para 1, a, b, c y 3
\W Comprueba todos los ca­ra­c­te­res excepto los al­fa­nu­mé­ri­cos; lo contrario de \w “1abc$%3”
  • \W busca dos coin­ci­de­n­cias para $ y %
\Z Comprueba si la cadena de ca­ra­c­te­res es­pe­ci­fi­ca­da está al final de una cadena “Python\Z”
  • Coincide con “RegEx in Python”
  • No coincide con “Python RegEx”

Funciones para el uso de las RegEx en Python

Si quieres utilizar RegEx en Python, hay una serie de funciones pre­de­fi­ni­das que te ayudarán. Todas estas funciones se en­cue­n­tran en un módulo de Python llamado “re”, el cual tendrás que importar antes de trabajar con ex­pre­sio­nes regulares:

import re
Python

re.findall()

Pro­ba­ble­me­n­te la función más im­po­r­ta­n­te cuando se trabaja con RegEx de Python es la función findall(). Toma un patrón de búsqueda y una cadena Python y devuelve una lista Python co­n­si­s­te­n­te en cadenas que contienen todas las coin­ci­de­n­cias en el orden en que fueron en­co­n­tra­das. Si no se encuentra ninguna coin­ci­de­n­cia, la llamada a findall() devuelve una lista vacía.

Un ejemplo de código que ayuda a mostrar la función:

import re
string = "python 3.0"
regex = "\D"
resultado = re.findall(regex, string)
print(resultado)
Python

En el fragmento de código anterior, el módulo re se importa primero como se muestra. La cadena “python 3.0” se almacena en la variable “string”. El patrón de búsqueda que se almacena en la variable llamada “regex” ya se conoce de la tabla de se­cue­n­cias y coincide con todos los ca­ra­c­te­res que no sean dígitos. Esta búsqueda se realiza con la función findall(), que toma como pa­rá­me­tros de paso el patrón de búsqueda y la cadena a examinar. La lista devuelta por la función se almacena en la variable llamada “resultado” y se muestra en pantalla con una llamada a Python print. El resultado es el siguiente:

['p', 'y', 't', 'h', 'o', 'n', ' ', '.']

La lista contiene todos los ca­ra­c­te­res de la cadena excepto los dígitos. Debe tenerse en cuenta que el carácter de espacio también cuenta como carácter in­de­pe­n­die­n­te y, por tanto, aparece dentro de la lista.

re.sub()

La función sub() so­bre­s­cri­be todas las coin­ci­de­n­cias con un texto de tu elección. Al igual que findall(), la función toma una expresión regular como primer parámetro. Debes pasar el texto con el que deseas sustituir las coin­ci­de­n­cias como segundo parámetro de paso. El tercer parámetro de paso de la función es la cadena a buscar. Si no deseas so­bre­s­cri­bir todas las coin­ci­de­n­cias, sino solo algunas, puedes es­pe­ci­fi­car un número como cuarto parámetro de paso, que indica cuántas coin­ci­de­n­cias deben re­em­pla­zar­se, empezando por la primera.

Este ejemplo de código también te ayudará a vi­sua­li­zar cómo funciona:

import re
string = "python es un lenguaje estupendo"
regex = "\s"
resultado1 = re.sub(regex, "0", string)
print(resultado1)
resultado2 = re.sub(regex, "0", string, 2)
print(resultado2)
Python

De nuevo, primero se importa re y luego se almacena una cadena de ca­ra­c­te­res en la variable “string”. Ya conoces el patrón de búsqueda que se va a aplicar: comprueba todos los espacios de una cadena.

A esto le siguen dos llamadas similares a sub(): la primera llamada a la función sustituye todos los espacios de la cadena por un 0 y almacena el resultado en la variable “resultado1”. La segunda llamada a la función limita el número de espacios con el cuarto parámetro de paso opcional. Por lo tanto, sustituye los dos primeros espacios de la cadena por un 0 y, a co­n­ti­nua­ción, almacena el resultado en la variable “resultado2”.

El resultado del código anterior es, por tanto, el siguiente:

'python0es0un0lenguaje0estupendo'
'python0es0un lenguaje estupendo'

re.split()

La función split() del módulo re recuerda a un Python split en la forma en que funciona, como su nombre indica. También divide una cadena de ca­ra­c­te­res en una lista. Aquí, la cadena se in­te­rru­m­pe después de cada coin­ci­de­n­cia con una expresión regular. Por lo tanto, no sorprende que la función espere un patrón de búsqueda como primer parámetro y la cadena a dividir como segundo parámetro. Si quieres dividir una cadena solo un número limitado de veces, puedes incluir un número como tercer parámetro opcional. Este determina el número máximo de splits. De nuevo, este ejemplo te ayudará a en­te­n­de­r­lo:

import re
string = "python es un lenguaje estupendo"
regex = "\s"
resultado1 = re.split(regex, string)
print(resultado1)
resultado2 = re.split(regex, string, 1)
print(resultado2)
Python

La mayor parte del código ya te resultará familiar del ejemplo anterior. Lo único que ha cambiado es la llamada a la función split(). En primer lugar, se llama a la función split() sobre la cadena y se supone que la divide cada vez que aparece un espacio. La lista re­su­l­ta­n­te se asigna a la variable “resultado1”. La segunda llamada a split() limita el número de di­vi­sio­nes a 1 es­pe­ci­fi­ca­n­do el tercer parámetro opcional y asigna el resultado a la variable llamada “resultado2”. Cuando se ejecuta el programa, devuelve el siguiente resultado:

['python', 'es', 'un', 'lenguaje', 'estupendo']
['python', 'es un lenguaje estupendo]

re.search()

Como su nombre indica, la función search() busca una coin­ci­de­n­cia en una cadena. Para ello, primero toma la expresión regular y la cadena a examinar como segundo parámetro. Devuelve un objeto Python coin­ci­de­n­te que siempre se refiere a la primera coin­ci­de­n­cia en­co­n­tra­da. Si no se encuentra ninguna coin­ci­de­n­cia, la función devuelve el valor “None”. Una vez más, un ejemplo ayuda a aclarar cómo funciona la función:

import re
string = "python es un lenguaje estupendo"
regex = "\s"
match = re.search(regex, string)
if match:
	print("RegEx ha sido encontrado.")
else:
	print("RegEx no ha sido encontrado.")
Python

La función search() se llama con una expresión regular que busca espacios y una cadena. El objeto coin­ci­de­n­te devuelto por la llamada a la función se almacena en la variable llamada “match”. La siguiente sentencia if else de Python es para fines ilu­s­tra­ti­vos: si se ha en­co­n­tra­do una coin­ci­de­n­cia, el objeto match no está vacío y se elige la ruta if. El programa dará el siguiente resultado:

'RegEx ha sido encontrado.'

El objeto coin­ci­de­n­te

El objeto coin­ci­de­n­te es devuelto por una llamada a search() y contiene in­fo­r­ma­ción sobre las coin­ci­de­n­cias en­co­n­tra­das del patrón de búsqueda. Puedes acceder a esta in­fo­r­ma­ción con varias funciones:

  • objekt.start() devuelve el índice del primer carácter de la cadena Python que co­rre­s­po­n­de al patrón de búsqueda.
  • objekt.end() devuelve el índice del ultimo carácter, de forma análoga a start().
  • objekt.span() combina start() y end(): la función devuelve una Python tuple que contiene el primer y el ultimo índice de la subcadena.
  • objekt.string devuelve la cadena examinada.
  • objekt.re devuelve el RegEx de Python pasado a search().

Todas estas funciones pueden ilu­s­trar­se añadiendo llamadas a funciones adecuadas al último ejemplo de código:

import re
string = "python es un lenguaje estupendo"
regex = "\s"
match = re.search(regex, string)
if match:
	print("RegEx ha sido encontrado.")
else:
	print("RegEx no ha sido encontrado.")
print(match.start())
print(match.end())
print(match.span())
print(match.string)
print(match.re())
Python

El resultado del programa es el siguiente:

'RegEx ha sido encontrado.'
6
7
(6, 7)
'python es un lenguaje estupendo '
re.compile('\\s')

En primer lugar, se muestra “RegEx ha sido en­co­n­tra­do” porque el objeto de coin­ci­de­n­cia no está vacío y, por tanto, se aplica la condición if. A co­n­ti­nua­ción, se muestra el índice de la primera coin­ci­de­n­cia. Como el primer espacio en blanco tiene el índice “6”, el valor es de esperar. Lo mismo ocurre con el valor “7”, que se obtiene como resultado de llamar a la función end(). La tupla “(6,7)” unifica la llamada a start() y end() dando ambos índices a la vez. El resultado de la cadena pasada al objeto coin­ci­de­n­te también es de esperar.

Pero ¿qué pasa con el resultado “re.compile(’\s’)”? Se trata de un objeto RegEx de Python. Se crea cuando la cadena que has pasado como expresión regular se procesa como tal. Como puedes ver, puedes vi­sua­li­zar el objeto RegEx a través del objeto coin­ci­de­n­te.

Ir al menú principal