【问题标题】:Regex to find date change in log file正则表达式查找日志文件中的日期更改
【发布时间】:2013-11-20 05:05:08
【问题描述】:

我的日志文件格式如下

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 位数的日期开头,包括斜线。但是这个查找的目的不是查找​​日志中的每一行,而是查找下一行与上一行不匹配的时间(日期变化)。

我想看后面可以做到这一点,但我不知道如何忽略描述和时间,只看前一行的日期。

【问题讨论】:

  • 您希望使用哪种语言/脚本?
  • 那么在这种情况下,您只想匹配第一行,因为第二行不匹配?
  • 我想在记事本++中执行此操作,我只是使用允许一些正则表达式的查找/替换对话框,但我认为这太有限了。我刚刚发现它有一个 python 插件,它可以工作,但是如果有一个用于 notepad++ 的本机脚本语言,那将是首选。

标签: regex date compare width fixed


【解决方案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

【讨论】:

  • 感谢您的回复。如果我想返回具有相同日期的前 2 行或前 5 行怎么办?
  • 如果没有正则表达式会容易得多。 IE。您仍然可以使用正则表达式来解析一行,但之后,只需遍历解析的行并实现您需要的任何逻辑。
  • 这正是我想要的,如果可以的话,我会将您的答案标记为有用。
猜你喜欢
  • 2018-07-11
  • 1970-01-01
  • 2011-12-31
  • 2015-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-16
  • 1970-01-01
相关资源
最近更新 更多