在Apache访问日志中查找日期的正则表达式

2 投票
4 回答
3460 浏览
提问于 2025-04-15 11:42

我正在写一个Python脚本,想从我们2GB的Apache访问日志中提取数据。这里有一行日志的内容。

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/)"

我想从这一行中提取日期部分,但我用的正则表达式没有成功,我也不太明白为什么。以下是我的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)

运行后什么都没有返回。下面这些也一样:

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

我想不出其他方法来获取日期的一部分。我到底哪里理解错了呢?

4 个回答

0

match() 是用来尝试匹配整个字符串的。如果你想要查找字符串中的某个部分,可以试试 search()

你还可以查看 Python 正则表达式入门指南,以及 Python 页面,这些内容都在非常棒的 regular-expressions.info 网站上。

1

或者你可以使用一些已经存在的Python Apache日志解析工具,比如:

  • Apachelogs
  • Logtools
  • Logrep(Wtop包)
5

match() 是用来检查字符串开头是否有匹配的内容。如果你想在字符串的任何位置查找匹配的内容,就应该使用 search()。想了解更多信息,可以点击这里:http://docs.python.org/library/re.html#matching-vs-searching

撰写回答