Expresiones regulares

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:

regexDescripciónEjemplo
^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. 
\sCualquier espacio en blanco. 
\SCualquier 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. 
\wCualquier 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']

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *