编写正则表达式以查找失败的测试的名称

时间:2018-11-26 18:22:07

标签: regex regex-lookarounds

提琴:http://refiddle.com/o11q

我正在尝试针对我们的日志编写一个正则表达式,以匹配下面文本的粗体部分。

  

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之间。我们浏览的文本斑点很大,因此正则表达式应该是全局的。

谢谢!

1 个答案:

答案 0 :(得分:1)

您本质上希望将当前正则表达式中的.替换为肯定包含可能包含在测试名称中的所有字符,但排除不大可能包含的字符的字符类。的名字。

您有很多选择,所有这些选择在您输入的内容上均能很好地工作。根据您对其余日志的经验,判断哪个最好。

>\s(\S+)\sFAILED\\n会匹配任何不包含空格的测试名称,但是如果任何测试名称都用空格以外的空格分隔,则可能会比您想要的更多匹配。

>\s((?:(?!\\n).)*)\sFAILED\\n将匹配任何不包含换行符的测试名称,但如果任何行包含多个>字符,则可能比您想要的更多匹配。

>\s(\w+)\sFAILED\\n将匹配仅包含字符a-zA-Z0-9_的任何测试名称,但匹配项少于您想要任何测试名称是否包含其他字符。

>\s([^>]+)\sFAILED\\n将匹配>FAILED之间的所有内容,可能比您想要的更多。