Regex 记事本++;正则表达式:搜索可能包含换行符的长字符串
给定一个包含100000多条日志消息的文件,如:Regex 记事本++;正则表达式:搜索可能包含换行符的长字符串,regex,notepad++,newline,multiline,Regex,Notepad++,Newline,Multiline,给定一个包含100000多条日志消息的文件,如: 2017-08-10T14:49:09: Debug: D-UNK-000-000: [Event Processor] connectorStatus: Pending 2017-08-10T14:49:09: Debug: D-UNK-000-000: [Event Processor] context: <DataItem type="System.Availability.StateData" time="2017-08-0
2017-08-10T14:49:09: Debug: D-UNK-000-000: [Event Processor] connectorStatus: Pending
2017-08-10T14:49:09: Debug: D-UNK-000-000: [Event Processor] context: <DataItem type="System.Availability.StateData" time="2017-08-04T01:10:59.9525690+02:00"><ManagementGroupId>{05120214-5C27-A4EE-D32B-09CB2239421C}</ManagementGroupId><Property Name="Details" VariantType="8">There are 1 messages attached
03.08.2017 21:00:12
Title: Mail sync issue
User Impact: Users are unable to sync emails using Apple Mail on their Mac computers.
</Property></DataItem>
2017-08-10T14:49:09: Debug: D-UNK-000-000: [Event Processor] context_ManagementGroupId: {05120214-5C27-A4EE-D32B-09CB2239421C}
2017-08-10T14:49:09: Debug: D-UNK-000-000: [Event Processor] context: null
2017-08-10T14:49:09: Debug: D-UNK-000-000: [Event Processor] context_HealthServiceId: 390382B5-C177-0529-DDC0-F2969F667E49
2017-08-10T14:49:09:调试:D-UNK-000-000:[事件处理器]连接器状态:挂起
2017-08-10T14:49:09:调试:D-UNK-000-000:[事件处理器]上下文:{05120214-5C27-A4EE-D32B-09CB2239421C}附加了1条消息
03.08.2017 21:00:12
标题:邮件同步问题
用户影响:用户无法在Mac电脑上使用Apple Mail同步电子邮件。
2017-08-10T14:49:09:调试:D-UNK-000-000:[事件处理器]上下文管理组ID:{05120214-5C27-A4EE-D32B-09CB2239421C}
2017-08-10T14:49:09:调试:D-UNK-000-000:[事件处理器]上下文:null
2017-08-10T14:49:09:调试:D-UNK-000-000:[事件处理器]上下文\u HealthServiceId:390382B5-C177-0529-DDC0-F2969F667E49
每个日志消息都以时间戳开头的新行开始。但有些日志消息扩展到多行;在上面的示例中,请参见第2行,其中包含“context:”,然后是一些嵌入了多个换行符的任意xml。因此,在上面的示例中,正好有5条日志消息
我正在寻找非常长的日志消息,比如超过15000个字符
我可以使用记事本++搜索此模式(选项“.matches newline”选中),逐步浏览所有相关日志消息:
context:(.+?)2017-0\d-\d\dT\d\d:\d\d:\d\d:
但我没能扩展它只会给我长的
我原以为以下内容可以工作,但运气不佳(它选择了整个文件):
context:(.+?){15000,}2017-0\d-\d\dT\d\d:\d\d:
如果Notepad++无法做到这一点,我也愿意使用其他工具,包括linux机器上的命令行
不需要,但如果容易做到:
搜索与我解释的内容相同的内容,并将整个xml字符串替换为其长度(字符数)。您可以使用
(?s)context:(?:(?!2017-0\d-\d\dT\d\d:\d\d:\d\d:).){350,}
说明:
-DOTALL模式打开(与(?s)
匹配新行启用相同)
-文本子字符串上下文:
-350或更多次((?:(?!2017-0\d-\d\dT\d:\d\d:){350,}
)未启动{350,}
子模式序列的任何字符(2017-0\d-\d\dT\d\d:\d\d:
)
(?:(?!)*
就是所谓的
根据需要调整限制量词最小阈值
试试
(?s)上下文:(?:(?!2017-0\d-\d\dT\d\d:\d\d:\d\d:){350,}
然后将350
调整到你的阈值。威克托,你是个天才:-)也许你可以解释一下这是怎么回事?我补充了一个答案,并做了一些解释。