如何通过正则动态提取日志文件中最后一个Summary段落内容
正则修改方案(匹配每组日志最后一个完整Summary)
原正则存在的问题
你之前的正则里添加了(?=\(Total)前瞻限制,要求Summary段的第一个属性必须以(Total开头,直接过滤掉了首属性为(Command ScanPath的完整Summary,加上非贪婪匹配逻辑会优先命中第一个符合条件的Summary,所以只能拿到短的4属性结果。
修正后正则
\bMessage[^\:]+:\s(?<LogEntryDate>[\d\-]+\s[\d\:]+):\s(?:Beginning|\<\-\sclsAAProxy)(?:[^{]+(?:{(?!Summary\s:\s)[^{]+)+)*{Summary\s:\s(?:(?<Summary>(?<keyval>\((?<key>[^=]+)\s=\s(?<value>[^)]+)\))+)})?>[^N]+(?:N(?!ext)[^N]+)*\bNext\b\s[^\d]+(?<ReqNumber>\d+)\sis\s(?<NextRunDate>[\d\-]+\s[\d\:]+)
调整说明
- 移除了
(?=\(Total)不必要的前瞻限制,兼容所有属性开头的Summary段 - 调整了{}块匹配的逻辑,确保匹配到当前段落内最后一个出现的Summary,不会提前命中前面不完整的Summary
- Summary段的匹配规则为捕获所有连续的
(键 = 值)格式内容,不受是否存在Errors字段影响,属性数量变化也能完整捕获 - 保留了原有所有命名捕获分组,不需要修改后续提取逻辑
内容的提问来源于stack exchange,提问作者Vladut
相关产品推荐
相关产品推荐

