【发布时间】:2011-12-07 19:44:02
【问题描述】:
我们解析由自动化脚本创建的日志。我们关心的一个典型的事情是字符串:'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)'
问题是,有些日志是手动创建的,用户自己输入这些信息。为了提醒自己格式,他们添加了一个带有模板的对话框:
02:24:50.655 - INFO - gui: Step Dialog: For test results management purposes, specify the build in which the test is executed in the following format, build version: 'specify version here'
02:25:04.905 - INFO - gui: Response: OK
02:25:04.905 - INFO - gui: Comments: 'build version: '1.11.11''
我目前的正则表达式是.*[Bb]uild [Vv]ersion:*\s*(?!.*<)'?([^']*)'。 '(?!.*<)' 是我第一次尝试避免这个问题,因为有些用户会写''。不过,这并没有解决上述情况。我认为正确的做法是消极的向后看,如果'Step Dialog' 在线,则不匹配,但根据regexr,我尝试写这似乎失败了我(出于某种原因,它是不让我分享我保存的表单的链接)。我认为消极的lookbehind 看起来像这样:(?<!Step Dialog) 并导致:
`(?<!Step Dialog).*[Bb]uild [Vv]ersion:*\s*(?!.*<)'?([^']*)'`
但出于某种原因,这与上面的第一行和第三行都匹配。
编辑:
'[Bb]' 和 ':\s' 适用于通过使用多个冒号和空格(大写“Build”)以不完全正确的格式输入信息的用户。一般情况下清理此问题的建议表示赞赏,我对正则表达式比较陌生。
【问题讨论】: