Expresiones Regulares , ficheros, Python y problemas
lasizoillo
lasizoillo en gmail.com
Vie Feb 15 16:18:15 CET 2008
El 15/02/08, inf200468 en ucf.edu.cu <inf200468 en ucf.edu.cu> escribió:
>
>
> Hola:
> ���������� tengo un
> fichero log , donde sus lineas son algo como:
>
>
> 10.14.17.12 - - [06/Feb/2008:07:35:19 -0500] "GET /src/webmail.php
> HTTP/1.1" 200 335 "http://correo/src/login.php" "Mozilla/4.0
> (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR 2.0.50727)"
>
Ok, tipicas de apache
>
> patron_IP =
> re.compile('[10-256]..[0-255]..[0-255]..[0-255]')
> iterator = patron_IP.finditer
> (linea)
> for result in iterator:
> �� print
> linea[result.start():result.end()]
>
No conocia esa forma de definir clases en las expresioner regulares :-O
> pero nunca me devuelve la ip completa solo
> 10.14.17.1 y el 2 no lo da, es decir el ultimo numero, para la fecha escribi:
>
Tiene sentido, en el momento que encuentra el 1, para qué va a buscar más.
Mirate eso que dice del greedy http://docs.python.org/lib/re-syntax.html
Para la ip prueba r"^(?:[\d]+\.){3}[\d]+", que viene a significar
r"" -> No me escapes las contrabarras de dentro, que las uso en la regex
^ -> Inicio de cadena
(?:) -> Es un grupo, pero no lo guardes
\d -> Digito
[\d]+ -> Todos los digitos que te encuentres, pero al menos uno
\. -> Caracter punto
(?:[\d]+\.){3} -> 3 apariciones de un grupo (a no guardar) de digitos
(uno o mas) seguido de un punto
Cuesta entender las expresiones regulares, pero son muy potentes.
Aunque en este caso, quizá no necesites la potencia que dan. Puedes
hacer algo asi:
>>> a = "10.14.17.12 - - [06/Feb/2008:07:35:19 -0500] "
>>> a.split()
['10.14.17.12', '-', '-', '[06/Feb/2008:07:35:19', '-0500]']
>>> a.split()[0]
'10.14.17.12'
>>> a.split()[3][1:]
'06/Feb/2008:07:35:19'
>>> a.split()[3][1:12]
'06/Feb/2008'
Como esta separado por espacios, y la fecha va a tener un ancho fijo,
esta manera te sirve.
Con una regex y grupos, puedes recoger la ip y la fecha del tiron. En
una sola pasada.
Y cambiando de tercio. ¿Por que no llegan los envios nuevos que mando
a la lista y si las respuestas? ¿Es alguna movida (grey list o así)
anti-spam que me esta filtrando los mensajes nuevos?
Un saludo:
Javi
------------ próxima parte ------------
_______________________________________________
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