miércoles, 27 de febrero de 2013

Búsqueda con patrones y re, mostrar resultados en grupos ( expresiones regulares)

En de terminados casos nos encontramos con el problema de buscar una cierta cadena de texto o números que son precedidos o antecedidos por ciertos caracteres  en una linea o texto, o simplemente reordenar los datos como lo es  por ejemplo tomar la fecha.

tenemos la siguiente cadena en la linea de ejemplo

cadenafecha="hoy es 28 de febrero de 2013"

y nosotros queremos obtener el dia 28 febrero y 2013

para ello generamos un patrón

meses="enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre"
patron= "hoy es (\d{1,2}) de ("+meses+") de (\d{4})"
Con esto, lo que esté dentro de los paréntesis sera el objetivo:
\d porque es un número
{1,2} el tamaño de ese número entre 1 y 2 dígitos
("+meses+") Cualquiera de los meses
 y nuevamente un número, esta vez exclusivamente de 4 dígitos


ahora ejecutamos la búsqueda


busqueda=re.search(patron, cadenafecha)
fecha=busqueda.groups()[2]+"-"+busqueda.groups()[1]+"-"+busqueda.groups()[0]

Esto nos imprimira:

2013-febrero-28

re.search nos arroja un arreglo con los 3 objetivos (los () ), por lo que podemos ubicarlos y asignarlos según el orden en que fueron llamados, dándo el número del objetivo que deseemos usar( a partir del 0)
busqueda.groups()[2]
en este caso 2013 que corresponde al último objetivo.

Para más objetivos y casos particulares visten ésta página o dejen un comentario

saludos