Expresiones Regulares

Chema Cortes pych3m4 en gmail.com
Lun Feb 18 12:49:31 CET 2008


El 15/02/08, inf200468 en ucf.edu.cu <inf200468 en ucf.edu.cu> escribió:

> ?como puedo definir un
> patron para la ip y otro
> para la fecha,

> #PATRONES A BUSCAR
> patron_IP =
> re.compile('[10-256]..[0-255]..[0-255]..[0-255]')

Esta expresión regular no está bien. Te aconsejo que vuelvas a revisar
la sintaxis de las expresiones regulares.

[10-256] es un grupo que busca los siguientes dígitos: 0,1,2,5,6
[0-255] es otro grupo que busca 0,1,2,5

No se pueden buscar rangos numéricos con expresiones regulares.

Y los dos puntos seguidos ".." indica que busque dos caracteres
cualesquiera (no sólo puntos).

Un posible patrón sería:

r"\d+\.\d+\.\d+\.\d+"

Busca cuatro números separados por puntos. La pega es que no
discrimina según el rango numérico (por ejemplo, 555.555.555.555
pasaría por IP válida); pero éso no debería ser un problema para
analizar ficheros logs.

> patron_FECHA =
> re.compile('[00-31]./.*./.*.:[00-60]')

r"\d{2}/.../\d{4}/"


Después de buscar el patrón, sería bueno que chequearas que cumple con
lo que estás buscando. Pero, como ya te he dicho, estás aplicando
estos patrones sobre ficheros logs de formato conocido y no vas a
tener mayor problema. Es más, si sabes que siempre va a estar la ip en
la primera columna y después vendrá la fecha, lo más seguro es que no
necesites para nada las expresiones regulares.

En cuenta a procesar el fichero, hay formas más "idiomáticas" en
python de hacer estos procesos. Por ejemplo, si tenemos ya hemos
programado un función (IPFecha()) que devuelve una tupla con la ip y
la fecha a partir de una línea de texto, la forma de "procesar" el
fichero sería algo así:

for (ip, fecha) in (IPFecha(l) for l in open("d:/log")):
   ....

Otro ejemplo: si siempre va a estar la IP en la primera columna,
tendríamos un modo rápido de procesar el log sin necesitar expresiones
regulares:

itFichero=(l.split(" ",1) for l in open("d:/log"))

for (ip,resto) in itFichero:
  ...
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es