Módulo re en Python: expresiones regulares

En un post anterior, mostramos mediante un ejemplo la utilidad de las expresiones regulares. En esa ocasión, comparamos las líneas de código necesarias para manipular texto con y sin expresiones regulares. Para continuar, ahora repasaremos algunas de las funciones contenidas deltro del módulo re en Python. De esa manera, dispondremos de más herramientas a la hora de buscar patrones dentro de una cadena de texto dada.

El módulo re en Python

A causa de que las expresiones regulares a menudo utilizan caracteres de escape (como por ejemplo la barra invertida \), es necesario indicar que las mismas no se interpreten como tales sino como parte de la expresión regular propiamente dicha. La forma más simple de hacerlo es comenzar la cadena con una letra r para indicar que la misma debe tomarse literalmente. En Python, esto se denomina un raw string.

El ejemplo más simple de una raw string es r'\n'. Como resultado, Python «verá» dos caracteres: '\' y 'n'. Por otra parte, si escribiéramos '\n' (sin la r al principio), Python lo interpretaría como un solo caracter (el salto de línea).

Las funciones

A continuación, veamos algunas de las funciones que usaremos más a menudo:

1) re.compile(patrón) permite compilar una expresión regular (dada por patrón) en un objeto. El mismo puede usarse posteriormente por las funciones match() y search() como veremos enseguida.

2) Una vez que una expresión regular ha sido compilada en un objeto, el mismo acepta las funciones

  • objeto.search(cadena), la cual busca dentro de cadena la presencia de un string que satisfaga la expresión regular, y
  • objeto.match(cadena) que intentará realizar la misma operación pero al comienzo de cadena, o a partir de la posición y la longitud que se indique.

3) El resultado de la función search se almacena en una variable (que en este caso llamamos mo) del tipo match object. Si la búsqueda dio resultado, la función group() devolverá el string que cumplió la expresión regular.

Veamos dos ejemplos para ilustrar:

import re
numeroTelefonoRegex = re.compile(r'\d\d\d\d\d\d\d\d\d\d')
mo = numeroTelefonoRegex.search('Mi número de celular es 1534234512')
if mo:
    print('Número de teléfono encontrado: ' + mo.group())
else:
    print('No se encontró un número de teléfono')

En la Fig. 1 vemos el resultado de utilizar dos cadenas de texto diferentes para buscar una ocurrencia del patrón especificado:

El módulo re en Python: uso de las funciones compile y search
Figura 1 – El módulo re en Python: uso de las funciones compile y search

En el primer ejemplo, 1534234512 cumple con la expresión regular especificada (8 dígitos seguidos, cada uno representado por \d). En el segundo, el string Quince34234512 no cumple con el patrón buscado y por eso el match object no expone ningún resultado.

Ejemplo final

Finalmente, veamos el uso de la función match. Al utilizarla en lugar de search y correr el mismo script anterior, obtenemos el siguiente resultado:

El módulo re en Python: uso de la función match
Figura 2 – El módulo re en Python: uso de la función match

Prestemos atención que en el segundo ejemplo tuvimos que especificar la posición de la cadena donde se debía comenzar la búsqueda.

Espero que este post les haya resultado útil. ¡Nos reencontramos en el próximo!