Regex para encontrar data no log de acesso Apache

votos
1

Eu estou escrevendo um script python para extrair dados fora do nosso log de acesso 2GB Apache. Aqui está uma linha do log.

81.52.143.15 - - [01/Apr/2008:00:07:20 -0600] GET /robots.txt HTTP/1.1 200 29 - Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) VoilaBot BETA 1.2 (http://www.voila.com/)

Eu estou tentando obter a parte de data a partir dessa linha, e regex está falhando comigo, e eu não sei porquê. Aqui está o meu código python:

l = 81.52.143.15 - - [01/Apr/2008:00:07:20 -0600] GET /robots.txt HTTP/1.1 200 29 - Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) VoilaBot BETA 1.2 (http://www.voila.com/)

re.match(r\d{2}/\w{3}/\d{4}, l)

não retorna nada. Nem faça o seguinte:

re.match(r\d{2}/, l)
re.match(r\w{3}, l)

ou qualquer outra coisa que eu posso coisa até obter parte da data. O que eu estou mal-entendido?

Publicado 19/05/2009 em 16:39
fonte usuário
Em outras línguas...                            


4 respostas

votos
5

match () procura uma correspondência no início da cadeia. Use a pesquisa () para procurar um jogo em qualquer lugar do string. Mais informações aqui: http://docs.python.org/library/re.html#matching-vs-searching

Respondeu 19/05/2009 em 16:46
fonte usuário

votos
1

Ou você pode usar um dos analisadores de log python apache já disponíveis, como:

  • Apachelogs
  • Logtools
  • Logrep (pacote WTOP)
Respondeu 19/10/2010 em 15:59
fonte usuário

votos
0

Ao invés de usar expressões regulares para obter a data, pode ser mais fácil simplesmente dividir a linha em espaços e extrair a data:

 l = '81.52.143.15 - - [01/Apr/2008:00:07:20 -0600] "GET /robots.txt HTTP/1.1" 200 29 "-" Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1) VoilaBot BETA 1.2 (http://www.voila.com/)"'
 date = l.split()[3]

Se você está processando arquivos muito grandes, esta é provavelmente mais eficiente do que o uso de expressões regulares.

Respondeu 19/05/2009 em 22:04
fonte usuário

votos
0

match()tenta corresponder a seqüência inteira. Tente search()vez.

Veja também o Python HOWTO expressões regulares , ea página Python no sempre excelente regular-expressions.info .

Respondeu 19/05/2009 em 16:45
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more