记事本++的正则表达式:寻找其中可能包含换行符

问题描述:

给出一个包含有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-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 

每个日志消息上的时间戳开头的新行开始。但是一些日志消息延伸到多行;在上面的例子中看到包含第二行的“上下文”,然后与多个嵌入一些换行符任意XML。因此,在上例中恰好有5条日志消息。

我正在寻找这是非常长的,说超过15000个字的日志信息。

我可以通过使用记事本+ +搜索出该模式的所有相关日志消息步骤(选项“匹配换行符。”选择):

context:(.+?)2017-0\d-\d\dT\d\d:\d\d:\d\d:

但我未能延续,它会给我只有很长的。

我预计,以下可以工作,但没有运气(它选择整个文件):

context:(.+?){15000,}2017-0\d-\d\dT\d\d:\d\d:\d\d:


如果这是不可能的记事本+ +,我也愿意用其他工具,包括Linux机器上的命令行。


没有必要的,但如果很容易可行:
搜索相同的东西我已经解释和更换整个XML字符串的长度(字符数)。

+1

尝试'方面:(:(?2017-0 \ D- \ d \的dT \ d \ d:\ d \ d:\ d \ d :)) {350}'和'调整到350'您门槛。 –

+0

Wiktor的,你是一个天才:-)也许你能解释一下这是如何工作? – mez79

+0

我添加了一个答案有一点的解释。 –

您可以使用

(?s)context:(?:(?!2017-0\d-\d\dT\d\d:\d\d:\d\d:).){350,} 

说明

  • (?s) - DOTALL模式ON(同.匹配换行符启用)
  • context: - 文字串
  • (?:(?!2017-0\d-\d\dT\d\d:\d\d:\d\d:).){350,} - 350次或更多次出现({350,})任何字符(.)不启动2017-0\d-\d\dT\d\d:\d\d:\d\d:子模式的序列组成。

(?:(?!).)*是所谓的greedy tempered token

根据您的看法调整限制量词最小阈值。 (?S)

enter image description here