[英]Regex strictly match two lines with different endings
我正在尝试匹配日志文件的以下文本:
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
如果您仅希望在“ 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
修饰符,除非您逐行阅读它。
这将使他们成为一个整体,并且介于两者之间。
(?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 )
)*
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.