正则表达式在日志文件中查找日期更改

时间:2013-11-20 05:05:09

标签: regex date compare width fixed

我的日志文件采用以下格式

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位数日期开头。但是这个搜索的目的不是找到日志中的每一行,而是找到下一行与前一行(日期更改)不匹配的时间。

我想看看后面有能力这样做,但我无法弄清楚如何忽略描述和时间,只看前一行的日期。

1 个答案:

答案 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