我们有访问日志,其中包含以下格式的日志记录:
0.93 172.19.180.93 - - - [14/Mar/2016:11:07:22 +0130] "GET /MyWeb/appResources/css/ng-tags-input.min.css HTTP/1.1" 200 1077 **0/4864**
现在,想要使用python脚本解析每一行,以确定在特定日期的10.00到19:00 hr之间发生的此类访问请求的数量。 尝试类似的事情:
for fname in filenames_245:
with open(fname) as infile:
for line in infile:
if re.search('[0-9][0-9]//Mar//2016/:[1]',line):
outfile.write(line)
有人可以建议正确使用模式来获取所需的数据。
答案 0 :(得分:0)
re.search()即使没有匹配也会求值为true,因为ir返回一个SRE对象,并且[1]上的正则表达式错误,你想要:
你想:
re.findall('\d\d/Mar/2016:1', data)
答案 1 :(得分:0)
您的正则表达式可以正常工作,但问题是您使用的是两个斜杠而不是一个斜杠。所以你应该把它写成'[0-9][0-9]/Mar/2016:[1]'
。
请注意,要转义字符,您应该在前面添加反斜杠(\)而不是正斜杠(/)。但在这里,你不需要逃避任何事情。
答案 2 :(得分:0)
尝试:
>>> re.search("14/Mar/2016:1", line)
<_sre.SRE_Match object at 0x7f37cd4179f0>
或
>>> re.search("{0}/{1}/{2}:1".format(date, month, year), line)
<_sre.SRE_Match object at 0x7f37cd417ac0>
如果你想把你的日子作为变量传递。
关于Joao Pinto,如果没有匹配,搜索将返回none: https://docs.python.org/3.5/library/re.html