我正在尝试针对我们的日志编写一个正则表达式,以匹配下面文本的粗体部分。
stage \ n [myenv-01] [管道] [MySearchTests] {(MySearchTests 测试)\ n [myenv-01] [管道] [MySearchTests]工具\ n [myenv-01] [MyPortalTests] \ n [myenv-01] [MyPortalTests] Tests.MyPortal.MakeAWidgetTests>验证WidgetUser@email.com是 允许创建窗口小部件PASSED \ n [myenv-01] [MyPortalTests] \ n [myenv-01] [MyPortalTests] Tests.MyPortal.MakeAWidgetTests> 验证NonWidgetUser@email.com角色不允许创建 小部件STARTED \ n扫描 widget-service / path / to / widget-service.jar ... \ n [myenv-01] [WidgetApp] \ n [myenv-01] [WidgetApp] Tests.WidgetPortal.LoginTest > loginWithWidgetUser FAILED \ n [myenv-01] [WidgetApp]
Test.Waiting.WaitTimeoutException,位于WidgetSpec.groovy:30 \ n [myenv-01] [WidgetApp]
这是我的正则表达式:
>\s(.*)\sFAILED\\n
当前与下面的粗体字匹配。
stage \ n [myenv-01] [管道] [MySearchTests] {(MySearchTests 测试)\ n [myenv-01] [管道] [MySearchTests]工具\ n [myenv-01] [MyPortalTests] \ n [myenv-01] [MyPortalTests] Tests.MyPortal.MakeAWidgetTests>验证WidgetUser@email.com是 允许创建窗口小部件PASSED \ n [myenv-01] [MyPortalTests] \ n [myenv-01] [MyPortalTests] Tests.MyPortal.MakeAWidgetTests > 验证NonWidgetUser@email.com角色不允许创建 小部件STARTED \ n扫描 widget-service / path / to / widget-service.jar ... \ n [myenv-01] [WidgetApp] \ n [myenv-01] [WidgetApp] Tests.WidgetPortal.LoginTest> loginWithWidgetUser FAILED \ n [myenv-01] [WidgetApp]
Test.Waiting.WaitTimeoutException,位于WidgetSpec.groovy:30 \ n [myenv-01] [WidgetApp]
如何使其与第一个文本Blob中加粗的内容匹配?现在匹配还为时过早。如果有帮助,则找到单词PASSED
时可以忽略匹配。基本上,我正在尝试对失败的测试名称进行正则表达式,我们知道这些名称介于大于字符>
和短语FAILED
之间。我们浏览的文本斑点很大,因此正则表达式应该是全局的。
谢谢!
答案 0 :(得分:1)
您本质上希望将当前正则表达式中的.
替换为肯定包含可能包含在测试名称中的所有字符,但排除不大可能包含的字符的字符类。的名字。
您有很多选择,所有这些选择在您输入的内容上均能很好地工作。根据您对其余日志的经验,判断哪个最好。
>\s(\S+)\sFAILED\\n
会匹配任何不包含空格的测试名称,但是如果任何测试名称都用空格以外的空格分隔,则可能会比您想要的更多匹配。
>\s((?:(?!\\n).)*)\sFAILED\\n
将匹配任何不包含换行符的测试名称,但如果任何行包含多个>
字符,则可能比您想要的更多匹配。
>\s(\w+)\sFAILED\\n
将匹配仅包含字符a-z
,A-Z
,0-9
和_
的任何测试名称,但匹配项少于您想要任何测试名称是否包含其他字符。
>\s([^>]+)\sFAILED\\n
将匹配>
和FAILED
之间的所有内容,可能比您想要的更多。