我们解析由自动脚本创建的日志。我们关心的一个典型问题是来自以下行的字符串:'1.10.07-SNAPSHOT (1.10.07-20110303.024749-7)'
:
15:28:02.115 - INFO - TestLib: Successfully retrieved build version: '1.11.11-SNAPSHOT (1.11.11-20110303.024749-7)'
问题是,有些日志是手动创建的,用户自己输入这些信息。为了提醒自己使用模板添加了对话框的格式:
^{pr2}$我的regex当前是.*[Bb]uild [Vv]ersion:*\s*(?!.*<)'?([^']*)'
。'(?!.*<)'
是我第一次尝试避免这个问题,因为有些用户会写''。但这并不能解释上述情况。我认为正确的做法是,如果'Step Dialog'
出现在行中,那么它就不匹配了,但是根据regexr的说法,我的写尝试似乎失败了(因为某些原因,它不允许我共享保存表单的链接)。我以为消极的回头看会是这样的:(?<!Step Dialog)
并导致这样的结果:
`(?<!Step Dialog).*[Bb]uild [Vv]ersion:*\s*(?!.*<)'?([^']*)'`
但出于某种原因,这和上面的第一行和第三行都匹配。在
编辑:
“[Bb]”和“:\s”用于使用多个冒号和空格(大写为“Build”)以不完全正确的格式输入信息的用户。建议清理这一点总的来说是赞赏的,我是相对较新的regex。在
有几种方法可以做到,但你已经很接近了。在
克里斯祖马的模式也应该起作用。用你最喜欢的。如果考虑性能,您可以对这三种模式进行基准测试,看看哪个更快。我的感觉是,它将是一个以“`”开头的`,但我不能肯定。在
编辑:正如ekhurvo指出的,the Python regex engine requires fixed-length lookbehinds,所以第一个在Python中不起作用。第二个应该没问题。在
您很接近,但它仍然匹配,因为它可以找到满足
.*
的字符串,而不必在前面加Step Dialog
。正面和负面的断言只会影响它们周围的模式。因此,您必须强制它检查您不想匹配的每个字符Step Dialog
。在试试这个:
现在,它确保
^
(行首)和[Bb]uild [Vv]ersion
之间的每个字符都是而不是字符串Step Dialog
。在你会注意到我也把它改成了积极的展望,因为它更容易理解发生了什么。在
相关问题 更多 >
编程相关推荐