我们分析由自动化脚本创建的日志。我们通常关注以下一行中的字符串:'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(由于某种原因,它不让我分享链接到我的保存的表单)。我认为负回顾后断言应该像这样:(?<!Step Dialog)
并且结果是这样的:
`(?<!Step Dialog).*[Bb]uild [Vv]ersion:*\s*(?!.*<)'?([^']*)'`
但是由于某种原因,它匹配了上面的第一行和第三行。
编辑: '[Bb]'和':\s'是为那些没有精确使用多个冒号和空格、大写'B'的用户提供的信息。欢迎提出一般性的清理建议,我对正则表达式相对较新。