如何选择,直到我找到动态日志中的"Error"字符串?正则表达式



我想动态地从日志文件中选择"摘要"之前的所有文本。直到我发现错误。在这一刻,a只成功获取了这个字符串:

(Total Scanned Files = 0)(Start Time = 2/16/2021 8:42:55 AM)(End Time = 2/16/2021 8:43:24 AM)(Total Time = 0h 0m 29s)}

但是我想用最后一个"总结"。在那里我发现了"错误"。所以我最终选中的字符串是这样的

(Command ScanPath = \D-022-an-labsdmsData)(Total Scanned Files = 0)(Total Archived Files = 20)(Total Bytes = 2707931)(Start Time = 2/16/2021 8:43:24 AM)(End Time = 2/16/2021 8:44:20 AM)(Total Time = 0h 0m 55s)(Errors = 0)

我的正则表达式:

bMessage[^:]+:s(?<LogEntryDate>[d-]+s[d:]+):s(?:Beginning|<-sclsAAProxy)(?:[^{]+(?:{(?!Summarys:s(?=(Total))[^{]+)+){Summarys:s(?:(?<Summary>(?<keyval>((?<key>[^=]+)s=s(?<value>[^)]+)))+)})(?>[^N]+(?:N(?!ext)[^N]+)*)bNextbs[^d]+(?<ReqNumber>d+)siss(?<NextRunDate>[d-]+s[d:]+)

我也把我的日志文件放入regex101: https://regex101.com/r/WwKLCx/1/

可以使用

bMessage[^:]+:s(?<LogEntryDate>[d-]+s[d:]+):s(?:Beginning|<-sclsAAProxy)[^{]*(?:{(?!Summarys:s(Total[^{}]*(Errors = d+)})[^{]*)*?{Summarys:s(?=[^{}]*(Errors = d+)})(?:(?<Summary>(?<keyval>((?<key>[^=]+)s=s(?<value>[^)]+)))+)})[^N]+(?:N(?!ext)[^N]+)*bNextbsD*(?<ReqNumber>d+)s+iss+(?<NextRunDate>[d-]+s[d:]+)

查看regex演示

我在负向前看中添加了[^{}]*(Errors = d+)}),以精确地获得包含" error "的{Summary,并在随后的模式部分中添加了(?=[^{}]*(Errors = d+)}),以确保捕获的Summary实际上包含此子字符串。

相关内容

最新更新