我的日志文件采用以下格式
mm/dd/yyyy hh:mm:ss Description
11/05/2013 03:01:00 Shutting down server...
11/05/2013 03:01:23 DumpCache(): 284114 items.
为了简单起见,我可以使用以下正则表达式来匹配日期
^(../../....)
这是有效的,因为我知道每一行都以包含斜线的10位数日期开头。但是这个搜索的目的不是找到日志中的每一行,而是找到下一行与前一行(日期更改)不匹配的时间。
我想看看后面有能力这样做,但我无法弄清楚如何忽略描述和时间,只看前一行的日期。
答案 0 :(得分:1)
在python中:
import re
diff_line_re = re.compile(r'''
(?:
(?P<date>\d{2}/\d{2}/\d{4})
\s+
(?P<time>[\d:]+)
\s+
(?P<message>[^\n]+)
\n
)(?!(?P=date))
''', re.X)
鉴于数据:
log_lines = '''
11/05/2013 03:01:00 1 Shutting down server...
11/05/2013 03:01:23 2 DumpCache(): 284114 items.
11/05/2013 03:01:00 3 Shutting down server...
11/07/2013 03:01:23 5 DumpCache(): 284114 items.
11/07/2013 03:01:00 6 Shutting down server...
11/08/2013 03:01:23 7 DumpCache(): 284114 items.
11/08/2013 03:01:00 8 Shutting down server...
11/09/2013 03:01:23 9 DumpCache(): 284114 items.
'''
我们执行脚本:
print(diff_line_re.findall(log_lines))
输出继电器:
[('11/05/2013', '03:01:00', '3 Shutting down server...'),
('11/07/2013', '03:01:00', '6 Shutting down server...'),
('11/08/2013', '03:01:00', '8 Shutting down server...'),
('11/09/2013', '03:01:23', '9 DumpCache(): 284114 items.')]
有关详细信息,请参阅python正则表达式文档:http://docs.python.org/3/library/re.html#module-re