正则表达式,提取区间内的变量

Regex, extract var inside interval

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

2017-02-20 15:58:45.442 - [XYZ] 155 RADIO_TRAIN_TO_TRACK_INITIATION_COM_SESSION
                                  .VAR1
                                  .VAR2
                                  .VAR3
                                  .VAR4
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] 155 RADIO_TRAIN_TO_TRACK_INITIATION_COM_SESSION
other lines

我的问题是:如何提取从 15:58:45 到 15:58:46 的所有文本(包括)。 (使用正则表达式)。

我使用 15:58:4[5-6]|VAR1 表达式,但此表达式提取日志中的所有 VAR1,我只会提取特定范围内的 VAR1。

此致

您可以使用这样的正则表达式技巧:

(15:58:45[\s\S]*?15:58:46)

Working demo

或者也使用 s 单行标志

(?s)(15:58:45.*?15:58:46)

您可以使用

\b15:58:4[5-6].*(?:\r?\n(?!\d{4}-\d{2}-\d).*)*

请注意 Multiline 复选框已 ON

详情:

  • \b - 单词边界
  • 15:58:4 - 文字字符序列
  • [5-6] - 56
  • .* - 该行的其余部分
  • (?:\r?\n(?!\d{4}-\d{2}-\d).*)* - 0+ 个序列:
    • \r?\n(?!\d{4}-\d{2}-\d) - 一个换行符(CRLF 或 LF)后面没有跟 4 个数字,-,2 个数字,- 和一个数字
    • .* - 该行的其余部分。

或相同的模式,但更短且效率更低,但可能更具可读性:

\b15:58:4[5-6].*?(?=\d{4}-\d{2}-\d|$)