martes, 24 de junio de 2008

Expresiones regulares en python

Uno de los módulos mas interesantes en python es el que se encarga de proporcionarnos las funcionalidades de las expresiones regulares. Este módulo se llama re.

Veamos un ejemplo de uso.

#!/usr/bin/python

import re;

cadena_larga="esto es una cadena muy larga";

if(re.search("cadena", cadena_larga)):
print "caso 1: presente";
else:
print "caso 1: ausente";

if(re.search("ca.ena", cadena_larga)):
print "caso 2: presente";
else:
print "caso 2: ausente";

if(re.search("\s.\s|\s..\s", cadena_larga)):
print "caso 3: presente";
else:
print "caso 3: ausente";

if(re.search("[0-9]", cadena_larga)):
print "caso 4: presente";
else:
print "caso 4: ausente";

if(re.search("[^0-9]", cadena_larga)):
print "caso 5: presente";
else:
print "caso 5: ausente";

if(re.search("ga$", cadena_larga)):
print "caso 6: presente";
else:
print "caso 6: ausente";

En estos ejemplos se está usando el método search, search busca coincidencias en toda la cadena. También existe match que tan solo busca coincidencias desde el principio de la cadena.

El primer ejemplo es el más sencillo, se busca la subcadena "cadena" dentro del texto.

En el segundo se introduce el uso del operador ".", que equivale a cualquier carácter.

En el tercer ejemplo se reúne el OR de dos consultas, palabras de un carácter con espacios a los dos lados y palabras con dos caracteres.

En el cuarto se busca cualquier número que haya en la cadena.

En el quinto justo lo contrario que en el cuarto, la ausencia de números.

En el sexto ejemplo se comprueba si la cadena termina con los caracteres "ga", para comprobar el comienzo de la cadena se usa "^".

Las expresiones regulares no son muy útiles si no podemos recuperar subcadenas de los textos que tratamos, se hace de la siguiente forma.

#!/usr/bin/python

import re;

cadena_larga="esto es una cadena muy larga";

parsed=re.search("(\S+)\s",cadena_larga);
print parsed.groups();

print re.findall("(\S+)\s",cadena_larga);

En el caso de usar search buscamos las primera palabra seguida de espacio, en el caso de findall se devuelve una lista con todas las coincidencias.

0 comentarios: