正则表达式,提取 select 文本

Regex, extract select text

我对微软的(正则表达式)有疑问。我有一个以这种模式写入的日志文件。

2017-02-20 15:58:45.442 - [XYZ] 155 RADIO_TRAIN_TO_TRACK_INITIATION_COM_SESSION
                                  .VAR1p
                                  .VAR2o
                                  .VAR3i
                                  .VAR4u
2017-02-20 15:58:46.432 - [XYZ]   32 RADIO_TRACK_TO_TRAIN_CONFIGURATION_DETERMINATION
                                  .VAR1
                                  .VAR2
                                  .VAR3
                                  .VAR4
                                  .VAR5
                                  .VAR6
2017-02-20 15:58:48.541 - [XYZ] 158 RADIO_TRAIN_TO_TRACK_INITIATION_COM_SESSION
                                  .VAR1x
                                  .VAR2c
                                  .VAR3v
                                  .VAR4f
                                  .VAR5d
                                  .VAR6s

我的问题是:如何从 2017-02-20 15:58:45.442 - [XYZ] 155... 中提取所有文本到 .VAR4u(包括消息 155 的所有文本),以及消息 158 的所有文本(包括时间戳)

我写了这段代码,但它 运行 不正确

(?<=\[XYZ] \b155\b(?:(?!\n\d{4}-\d{2}-\d).)*?\n {3,}\.)|(?<=\[XYZ] +\b158\b(?:(?!\n\d{4}-\d{2}-\d).)*?\n {3,}\.)

此致

DnGrep 工具使用了一个奇怪的 .NET 正则表达式实现:一旦使用了先行限制,最后一行就不会匹配。一定是bug。

无论如何,有效的是

(?m)^\d{4}-\d{2}-\d{2} \d{2}:[\d.:]+ - \[(?:RBC] +\b24|TRENO] \b156)\b(?:(?!\n\d{4}-\d{2}-\d).)*\.\w+[^\r\n]*

选中多行点作为换行符复选框。

\.\w+[^\r\n]* 部分必须匹配最后一行的非空白部分(\. 匹配一个点,\w+ - 1+ 个字符,[^\r\n]*会匹配除CR和LF以外的一个或多个符号,可以用(?-s:.*) - a modifier group where the "Dot as newline" should be disabled)代替。

这部分 - \[(?:RBC] +\b24|TRENO] \b156) - 用于避免重复整个模式(就像你在评论中所做的那样)。这将匹配 [,然后是 RBC]+spaces+24,或 TRENO 156(都是整个单词,因为模式后面有 \b)。