Python RegEx
Una RegEx, o Expresión regular, es una secuencia de caracteres que forma un patrón de búsqueda.
RegEx se puede utilizar para comprobar si una cadena contiene el patrón de búsqueda especificado.
Módulo RegEx
Python tiene un paquete integrado llamado re
, que se puede utilizar para trabajar con expresiones regulares.
Importe el módulo re
:
import re
RegEx en Python
Cuando hayas importado el módulo re
, podrás empezar a utilizar expresiones regulares:
Ejemplo
Busque la cadena para ver si comienza con "The" y termina con "Spain":
import re
txt = "The rain in Spain"
x = re.search("^The.*Spain$", txt)
Inténtalo tú mismo »
RegEx Funciones
El módulo re
ofrece un conjunto de funciones que nos permiten buscar una cadena para una coincidencia:
Función | Descripción |
---|---|
findall | Devuelve una lista que contiene todas las coincidencias |
search | Devuelve un objeto Match si hay una coincidencia en cualquier parte de la cadena. |
split | Devuelve una lista donde la cadena se ha dividido en cada coincidencia |
sub | Reemplaza una o varias coincidencias con una cadena |
Metacaracteres
Los metacaracteres son caracteres con un significado especial:
Carácter | Descripción | Ejemplo | Pruébalo |
---|---|---|---|
[] | un conjunto de personajes | "[a-m]" | Intentalo » |
\ | Señala una secuencia especial (también se puede utilizar para escapar de caracteres especiales) | "\d" | Intentalo » |
. | Cualquier carácter (excepto carácter de nueva línea) | "he..o" | Intentalo » |
^ | Empezar con | "^hello" | Intentalo » |
$ | Termina con | "planet$" | Intentalo » |
* | Cero o más ocurrencias | "he.*o" | Intentalo » |
+ | Una o más ocurrencias | "he.+o" | Intentalo » |
? | Cero o una ocurrencia | "he.?o" | Intentalo » |
{} | Exactamente, el número especificado de ocurrencias | "he.{2}o" | Intentalo » |
| | Cualquiera o | "falls|stays" | Intentalo » |
() | Captura y grupo |
Secuencias especiales
Una secuencia especial es un \
seguido de uno de los caracteres de la lista siguiente y tiene un significado especial:
Carácter | Descripción | Ejemplo | Intentalo |
---|---|---|---|
\A | Devuelve una coincidencia si los caracteres especificados están al principio de la cadena | "\AThe" | Intentalo » |
\b | Devuelve una coincidencia donde los caracteres especificados están al principio o al final de una palabra (la "r" al principio garantiza que la cadena se trate como una "cadena sin formato") |
r"\bain" r"ain\b" |
Intentalo » Intentalo » |
\B | Devuelve una coincidencia donde los caracteres especificados están presentes, pero NO al principio (o al final) de una palabra (la "r" al principio garantiza que la cadena se trate como una "cadena sin formato") |
r"\Bain" r"ain\B" |
Intentalo » Intentalo » |
\d | Devuelve una coincidencia donde la cadena contiene dígitos (números del 0 al 9) | "\d" | Intentalo » |
\D | Devuelve una coincidencia donde la cadena NO contiene dígitos | "\D" | Intentalo » |
\s | Devuelve una coincidencia donde la cadena contiene un carácter de espacio en blanco | "\s" | Intentalo » |
\S | Devuelve una coincidencia donde la cadena NO contiene un carácter de espacio en blanco | "\S" | Intentalo » |
\w | Devuelve una coincidencia donde la cadena contiene caracteres de palabra (caracteres de la A a la Z, dígitos del 0 al 9 y el carácter de subrayado _) | "\w" | Intentalo » |
\W | Devuelve una coincidencia donde la cadena NO contiene ningún carácter de palabra | "\W" | Intentalo » |
\Z | Devuelve una coincidencia si los caracteres especificados están al final de la cadena | "Spain\Z" | Intentalo » |
Conjuntos
Un conjunto es un conjunto de caracteres dentro de un par de corchetes []
con un significado especial:
Establecer | Descripción | Intentalo |
---|---|---|
[arn] | Devuelve una coincidencia donde uno de los caracteres especificados (a ,
r , o n ) está presente |
Intentalo » |
[a-n] | Devuelve una coincidencia para cualquier carácter en minúscula, alfabéticamente entre
a y n |
Intentalo » |
[^arn] | Devuelve una coincidencia para cualquier personaje EXCEPTO a ,
r , y n |
Intentalo » |
[0123] | Devuelve una coincidencia donde cualquiera de los dígitos especificados (0 , 1 , 2 , o 3 ) están presentes |
Intentalo » |
[0-9] | Devuelve una coincidencia para cualquier dígito entre
0 y 9 |
Intentalo » |
[0-5][0-9] | Devuelve una coincidencia para cualquier número de dos dígitos de 00 y 59 |
Intentalo » |
[a-zA-Z] | Devuelve una coincidencia para cualquier carácter alfabéticamente entre
a y z , minúsculas O mayúsculas |
Intentalo » |
[+] | En conjuntos, + , * , . , | , () , $ , {} no tiene un significado especial, por lo que [+] significa: devolver una coincidencia para cualquier carácter + en la cadena |
Intentalo » |
La función findall()
La función findall()
devuelve una lista que contiene todas las coincidencias.
Ejemplo
Imprimir una lista de todas las coincidencias:
import re
txt = "The rain in Spain"
x = re.findall("ai", txt)
print(x)
Inténtalo tú mismo »
La lista contiene las coincidencias en el orden en que se encuentran.
Si no se encuentran coincidencias, se devuelve una lista vacía:
Ejemplo
Devolver una lista vacía si no se encontró ninguna coincidencia:
import re
txt = "The rain in Spain"
x = re.findall("Portugal", txt)
print(x)
Inténtalo tú mismo »
La función de search()
La función search()
busca una coincidencia en la cadena y devuelve un objeto de Match si lo hay un partido.
Si hay más de una coincidencia, solo se devolverá la primera aparición de la coincidencia:
Ejemplo
Busque el primer carácter de espacio en blanco en la cadena:
import re
txt = "The rain in Spain"
x = re.search("\s", txt)
print("El primer carácter de espacio en blanco se encuentra en la posición:", x.start())
Inténtalo tú mismo »
Si no se encuentran coincidencias, se devuelve el valor None
:
Ejemplo
Make a search that returns no match:
import re
txt = "The rain in Spain"
x = re.search("Portugal", txt)
print(x)
Inténtalo tú mismo »
La función split()
La función split()
devuelve una lista donde la cadena se ha dividido en cada coincidencia:
Ejemplo
Dividir en cada carácter de espacio en blanco:
import re
txt = "The rain in Spain"
x = re.split("\s", txt)
print(x)
Inténtalo tú mismo »
Puede controlar el número de apariciones especificando el parámetro maxsplit
:
Ejemplo
Divida la cadena solo en la primera aparición:
import re
txt = "The rain in Spain"
x = re.split("\s", txt, 1)
print(x)
Inténtalo tú mismo »
La función sub()
La función sub()
reemplaza las coincidencias con el texto de su elección:
Ejemplo
Reemplace cada carácter de espacio en blanco con el número 9:
import re
txt = "The rain in Spain"
x = re.sub("\s", "9", txt)
print(x)
Inténtalo tú mismo »
Puede controlar el número de reemplazos especificando el parámetro count
:
Ejemplo
Reemplazar las primeras 2 ocurrencias:
import re
txt = "The rain in Spain"
x = re.sub("\s", "9", txt, 2)
print(x)
Inténtalo tú mismo »
Objeto Match
Un objeto Match es un objeto que contiene información sobre la búsqueda y el resultado.
Nota: Si no hay ninguna coincidencia, se devolverá el valor None
, en lugar del objeto de Match.
Ejemplo
Haga una búsqueda que devolverá un objeto Match:
import re
txt = "The rain in Spain"
x = re.search("ai", txt)
print(x) #this will print an object
Inténtalo tú mismo »
El objeto Match tiene propiedades y métodos utilizados para recuperar información sobre la búsqueda y el resultado:
.span()
devuelve una tupla que contiene las posiciones inicial y final de la coincidencia..string
devuelve la cadena pasada a la función.group()
devuelve la parte de la cadena donde hubo una coincidencia
Ejemplo
Imprime la posición (posición inicial y final) de la primera coincidencia.
La expresión regular busca cualquier palabra que comience con mayúscula "S":
import re
txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.span())
Inténtalo tú mismo »
Ejemplo
Imprime la cadena pasada a la función:
import re
txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.string)
Inténtalo tú mismo »
Ejemplo
Imprime la parte de la cadena donde hubo una coincidencia.
La expresión regular busca cualquier palabra que comience con mayúscula "S":
import re
txt = "The rain in Spain"
x = re.search(r"\bS\w+", txt)
print(x.group())
Inténtalo tú mismo »
Nota: Si no hay ninguna coincidencia, se devolverá el valor None
, en lugar del objeto de Match.