我正在尝试针对我们的日志编写一个正则表达式,以匹配下面文本的粗体部分。
stage\n[myenv-01] [Pipe] [MySearchTests] {(MySearchTests Tests)\n[myenv-01] [Pipe] [MySearchTests] tool\n [myenv-01][MyPortalTests] \n[myenv-01][MyPortalTests] Tests.MyPortal.MakeAWidgetTests > Validate WidgetUser@email.com is allowed to create a widget PASSED\n[myenv-01][MyPortalTests] \n[myenv-01][MyPortalTests] Tests.MyPortal.MakeAWidgetTests > Validate NonWidgetUser@email.com role is not允许创建小部件已开始\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]
测试.等待.WaitTimeoutException at WidgetSpec.groovy:30\n[myenv-01] [WidgetApp]
下面是我的正则表达式:
>\s(.*)\sFAILED\\n
它目前与下面的粗体文本匹配。
stage\n[myenv-01] [Pipe] [MySearchTests] {(MySearchTests Tests)\n[myenv-01] [Pipe] [MySearchTests] tool\n [myenv-01][MyPortalTests] \n[myenv-01][MyPortalTests] Tests.MyPortal.MakeAWidgetTests > Validate WidgetUser@email.com is allowed to create a widget PASSED\n[myenv-01][MyPortalTests] \n[myenv-01][MyPortalTests] Tests.MyPortal.MakeAWidgetTests**> Validate NonWidgetUser@email.com role is not允许创建小部件已开始\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]
测试.等待.WaitTimeoutException at WidgetSpec.groovy:30\n[myenv-01] [WidgetApp]
我怎样才能让它与我在第一个文本blob中加粗的内容相匹配?现在匹配太早了。如果有帮助,如果找到单词PASSED
,则可以忽略匹配。基本上,我试图正则化一个失败的测试的名称,我们知道这些名称在大于字符>
和短语FAILED
之间。我们浏览的文本blob很大,所以正则表达式应该是全局的。
1条答案
按热度按时间n6lpvg4x1#
实际上,您希望用一个字符类替换当前正则表达式中的
.
,该字符类 * 肯定 * 包含任何可能在测试名称中的字符,但排除任何不太可能在名称中的字符。你有很多选择,所有这些都能很好地处理你的输入。根据您对其余日志的经验,判断哪一个是最好的。
>\s(\S+)\sFAILED\\n
将匹配任何不包含空格的测试名称,但如果任何测试名称由空格以外的任何东西分隔,则 * 可能 * 匹配比您想要的更多。>\s((?:(?!\\n).)*)\sFAILED\\n
将匹配任何不包含换行符的测试名称,但如果任何行包含多个>
字符,则 * 可能 * 匹配比您想要的更多。>\s(\w+)\sFAILED\\n
将匹配仅由字符a-z
、A-Z
、0-9
和_
组成的任何测试名称,但如果任何测试名称包含其他字符,则匹配的数量将小于您所需的数量。>\s([^>]+)\sFAILED\\n
将匹配>
和FAILED
之间的所有内容,这 * 可能 * 比您想要的更多。