我正在尝试匹配日志文件的以下文本:
2019-05-22 03:40:01 INFO ReporteClaro:194 - Termino de procesar archivo
2019-05-22 03:40:01 INFO ReporteClaro:208 - Termino de procesar Transaction Report
除了末尾(archivo
和(Payment Report
)之外,其他单词均相同。
我已经尝试过了:
[\d]+-[\d]+-[\d]+ [\d]+:[\d]+:[\d]+ INFO ReporteClaro:[\d]+ - Termino de procesar (archivo|Transaction Report)
但这是|
运算符的可选匹配。这意味着它将匹配第一行或第二行,但是我严格需要使用正则表达式来匹配它们两者。我以为是这样,但显然不会运行:
[\d]+-[\d]+-[\d]+ [\d]+:[\d]+:[\d]+ INFO ReporteClaro:[\d]+ - Termino de procesar (archivo&Transaction Report)
PD:我已经尝试使用\ n另一种解决方案,但是有什么方法可以不重复而实现相同的结果呢?:
[\d]+-[\d]+-[\d]+ [\d]+:[\d]+:[\d]+ INFO ReporteClaro:[\d]+ - Termino de procesar archivo\n
[\d]+-[\d]+-[\d]+ [\d]+:[\d]+:[\d]+ INFO ReporteClaro:[\d]+ - Termino de procesar Transaction Report
答案 0 :(得分:1)
如果您仅希望在“ Termino de procesar”之后使用“ archivo”和“ Transaction Report”,即没有“ Termino de procesar Something Else”之类的东西。您可以简单地执行以下操作。
r"^.+Termino de procesar.+$"gm
只有从行首到行尾,只要其中包含“ Termino de procesar”一词,这才有效。
如果还有其他日志条目中包含“ Termino de procesar”,而您不想要的则可以使用以下内容。
r"^.+Termino de procesar archivo.*$|^.+Termino de procesar Transaction Report.*$"gm
我发现简单通常是最好的解决方案。无需显式选择日期时间内容或“ ReporteClaro”,只需在捕获之前使用全部捕获即可。更容易理解正则表达式imo。
编辑:
除非您逐行阅读它,否则需要gm
修饰符。
答案 1 :(得分:1)
这将使他们成为一个整体,并且介于两者之间。
(?s)[\d]+-[\d]+-[\d]+[ ][\d]+:[\d]+:[\d]+[ ]INFO[ ]ReporteClaro:[\d]+[ ]-[ ]Termino[ ]de[ ]procesar[ ](?:archivo|Transaction[ ]Report)(?:.*?[\d]+-[\d]+-[\d]+[ ][\d]+:[\d]+:[\d]+[ ]INFO[ ]ReporteClaro:[\d]+[ ]-[ ]Termino[ ]de[ ]procesar[ ](?:archivo|Transaction[ ]Report))*
可读版本
(?s)
[\d]+ - [\d]+ - [\d]+ [ ] [\d]+ : [\d]+ : [\d]+ [ ] INFO [ ] ReporteClaro:
[\d]+ [ ] - [ ] Termino [ ] de [ ] procesar [ ]
(?: archivo | Transaction [ ] Report )
(?:
.*? [\d]+ - [\d]+ - [\d]+ [ ] [\d]+ : [\d]+ : [\d]+ [ ] INFO [ ] ReporteClaro:
[\d]+ [ ] - [ ] Termino [ ] de [ ] procesar [ ]
(?: archivo | Transaction [ ] Report )
)*