在Apache访问日志中查找日期的正则表达式
我正在写一个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