如何使用正则表达式从动态日志中提取含Errors的最后一段Summary内容
正则匹配优化方案
你当前的正则未限制Summary块必须包含Errors字段,所以会优先匹配到更早出现的无Errors的Summary内容。可以对原有正则做如下调整:
调整后的完整正则
\bMessage[^\:]+:\s(?<LogEntryDate>[\d\-]+\s[\d\:]+):\s(?:Beginning|\<\-\sclsAAProxy)(?:[^{]+(?:{(?!Summary\s:\s(?=\(Total))[^{]+)+){Summary\s:\s(?=[^}]*\(Errors\s=\s[^)]+\))(?:(?<Summary>(?<keyval>\((?<key>[^=]+)\s=\s(?<value>[^)]+)\))+)})((?>[^N]+(?:N(?!ext)[^N]+)*)\bNext\b\s[^\d]+(?<ReqNumber>\d+)\sis\s(?<NextRunDate>[\d\-]+\s[\d\:]+)
核心调整点
- 在
Summary\s:\s后新增了肯定向前断言(?=[^}]*\(Errors\s=\s[^)]+\)),仅匹配包含Errors键值对的Summary块,过滤不符合要求的早期Summary内容 - 原有命名分组全部保留,不影响后续字段提取逻辑
- 若存在多个符合要求的Summary块,直接取所有匹配结果的最后一项即可获取最新的目标内容
内容的提问来源于stack exchange,提问作者Vladut
相关产品推荐
相关产品推荐

