Las expresiones regulares son secuencias de caracteres que se comportan como un patrón de búsqueda y que facilitan la búsqueda en cadenas de caracteres. En estas secuencias de caracteres se usa la barra invertida para indicar formas especiales o para añadir caracteres
Para usar las expresiones regulares en Python es necesario importar el módulo re.
import re
Para comenzar a usar el módulo es necesario saber cómo construir las expresiones regulares o patrones de búsqueda. Estos son algunos de los mas usados:
regex | Descripción | Ejemplo |
^ | Lo que se busca tiene que estar al principio de la línea. | Busca cualquier palabra que comience por zo y que tenga algún carácter detrás que no sea un espacio en blanco: ‘^zo\S*’ |
$ | Al final de la línea. | .*o’ |
. | Cualquier carácter. | Busca |
* | Cero o mas caracteres de lo que le digamos anteriormente | |
+ | Igual que * pero de un carácter o mas. | |
\s | Cualquier espacio en blanco. | |
\S | Cualquier carácter distinto de un espacio en blanco. | |
[a-z] | Cualquier carácter de la a a la z en minúsculas. | |
[A-Z] | Cualquier carácter de la A a la Z en mayúsculas. | |
[0-9] | Cualquier número. | |
[a-zA-Z0-9] | Cualquier carácter en minúsculas, mayúsculas o cualquier número. | |
[.] | El punto. | |
\w | Cualquier carácter alfanumérico. |
El siguiente ejemplo dividirá una frase en palabras y se buscarán todas las palabras que comiencen por ‘mu’. El patrón es ^ que indica que lo viene detrás tiene que estar al principio de la línea, luego mu seguido de .+, es decir lo que comience por mu y contenga al menos un carácter detrás ‘^mu.+’. El resultado de la búsqueda con el patrón es murciélago.
>>> import re
>>> texto = 'El veloz murciélago hindú comía feliz cardillo y kiwi.'
>>> patron = '^mu.+'
>>> textosplit = texto.split()
>>> for palabra in textosplit:
... busqueda = re.findall(patron,palabra)
... if len(busqueda) > 0:
... print(busqueda)
...
['murciélago']
Se pueden usar los siguientes métodos para buscar con expresiones regulares.
match(patrón, cadena, flags=0)
Aplica el patrón al principio de la cadena, devolviendo el objeto coincidente con el patrón, en caso negativo devuelve None.
fullmatch(patrón, cadena, flags=0)
A diferencia de match, fullmatch aplica el patrón a toda la cadena en vez de sólo al principio.
search(patrón, cadena, flags=0)
Busca el patrón a través de la cadena devolviendo el objeto coincidente, en caso de no encontrar nada devuelve None.
>>> texto = "El veloz zorro marrón saltó sobre el perro peresozo"
>>> re.search('zorro',texto)
<re.Match object; span=(9, 14), match='zorro'>
>>> texto[9:14]
'zorro'
findall(patrón, cadena, flags=0)
Devuelve una lista de todas las ocurrencias en la cadena. Si hay grupos en los patrones y se encuentran resultados, se devuelven listas de grupos en forma de listas de tuplas.
>>> import re
>>> texto = "El veloz zorro marrón saltó sobre el perro peresozo. Si que era rápido el zorro."
>>> re.findall('zorro',texto)
['zorro', 'zorro']
sub(patrón, reemplazo, cadena, contador=0, flags=0)
Devuelve la cadena obtenida tras, sustituir en la cadena pasada, por la parte izquierda, el patrón por su reemplazo.
>>> import re
>>> cadena = "Eso si que es un camión"
>>> cadenarepl = re.sub('cam','av',cadena)
>>> print(cadenarepl)
Eso si que es un avión
subn(patrón, reemplazo, cadena, contador=0, flags=0)
Es igual que sub, pero también devuelve el número de sustituciones que ha hecho. El resultado se obtiene en una tupla con 2 valores, la cadena obtenida y el número de veces que se ha realizado el reemplazo.
>>> import re
>>> cadena = "Eso si que es un camión. El camión de tus sueños."
>>> cadenarepl = re.subn('cam','av',cadena)
>>> print(cadenarepl)
('Eso si que es un avión. El avión de tus sueños.', 2)
split(patrón, cadena, maxsplit=0, flags=0)
Divide una cadena en base a las ocurrencias del patrón, eliminándolas de la lista. Si el patrón se incluye entre paréntesis también se incluye en el resultado. Si maxsplit es diferente a cero se produce un máximo de maxsplit ocurrencias.
>>> import re
>>> texto = "El veloz zorro marrón saltó sobre el perro peresozo"
>>> listasin = re.split('zorro|perro',texto)
>>> listasin
['El veloz ', ' marrón saltó sobre el ', ' peresozo']
>>> listasin = re.split('\s',texto)
>>> listasin
['El', 'veloz', 'zorro', 'marrón', 'saltó', 'sobre', 'el', 'perro', ‘peresozo']