我有两行以下的日志,我希望有单独的正则表达式来查找其中的每一行。在第二条日志行上触发没有问题。但是我有问题要为第一行设计表达式。名称Reset Reason test只是测试的一个例子,它中的单词数可能会有所不同,因此我不能在这里定义任何更具体的模式,然后只定义.*。
12.07.2016 13:54:20 SCR_OUTPUT: #### TC_0006 Reset Reason test
12.07.2016 13:54:20 SCR_OUTPUT: #### TC_0006 Reset Reason test done.我有正则表达式,通常执行我希望它做的事情:
([0-9:. ]*) SCR_OUTPUT: #### (TC_[a-fA-F0-9]{4,5}[:0-9]{0,4}) .*[ ](?!done\.$)我有两个例子想要区分:我是根据这里给出的例子。https://docs.python.org/3/howto/regex.html#lookahead-assertions
当它像这样结束时,一切都很好:(当然,我必须修改我的测试字符串)
[.](?!done$)当我尝试成为更适合我的东西时,例如:(我的done.在结尾有圆点)
[.](?!done\.$)然后就变得怪怪的。又一次改编。done.的后面应该是空格,而不是点,结果会很疯狂。每一行都给出了积极的结果。
[.](?!done\.$)我已经在pythex.org上测试过了。在这个链接下,你可以找到最新版本的我的实验。
有人知道我在哪里有窃听器吗?在这种情况下是否有可能触发呢?也许我该分两步做?
发布于 2016-07-19 08:53:46
如果要在末尾排除与done.匹配的行,则需要使用负前瞻性,并更好地锚定在行的开头:
^(?!.* done\.$)([0-9.]+\s+[\d:]+)\s+SCR_OUTPUT:\s*####\s*(TC_\w+).*
^^^^^^^^^^^^^^请参阅regex演示 (如果您有多行字符串输入,请记住使用re.M标志使^匹配行的开头,而不是字符串开始)。
注意,我增强了您提供的字符串的regex模式(初始部分转到([0-9.]+\s+[\d:]+)\s+大大减少了回溯,如果这个精确的模式与您的所有数据不匹配,您应该考虑使用类似的方法)。
无论如何,关注的核心是查找(?!.* done\.$),一旦它检查在换行符以外的0+字符后面是否存在空格+ done. ( done.),就会立即失败(.*)。
https://stackoverflow.com/questions/38453278
复制相似问题