我们正在编写一个 Python 脚本来解析应用程序日志文件。
大多数日志文件将遵循类似的格式:
09:05:00.342344343 [DEBUG] [SOME_APPLICATION] [SOME_FUNCTION] Lorem ipsum dolor sic amet
我们有各种正则表达式来解析通过的不同类型的日志行,并将相关字段剥离到 Python 正则表达式组(时间戳、日志级别、原始应用程序/函数以及有效负载中的字段)。
我将这些正则表达式中的每一个都存储在一个字典中:
foobar_patterns = {
'pattern1': re.compile(r'blahblahblah'),
'pattern2': re.compile(r'blahblahblahblah'),
}
然而,显然每种模式之间存在相当多的重叠——用于提取时间戳、日志级别等的正则表达式是共享的。
有没有办法消除这种冗余?你能以某种方式从一个通用模板构建不同的正则表达式字符串吗?
扩展 - 我遍历文件中的行,然后对于每个给定的行,遍历每个编译的正则表达式。然后基于此,有不同的函数来处理每种情况 - 例如,如果我们检测到某种类型的消息,我们可能需要向前搜索三行以找到另一行,并从中提取一个字段。
我也在考虑在 foobar_patterns 字典中存储一个函数,然后当我们遇到匹配时,执行它。
这是一种 Pythonic 的做事方式吗?
干杯,维克多