【问题标题】:Regular expression to match everything up to string正则表达式将所有内容匹配到字符串
【发布时间】:2020-03-16 12:57:22
【问题描述】:

我正在尝试将所有内容匹配到“ModelFinish”之前的最后一个“Saving*”行。我几乎可以通过消极的环顾来做到这一点(在Regular expression to match a line that doesn't contain a word 中描述),但不能让它与我试图匹配的字符串中的换行符一起工作。我正在使用记事本++,并且有一个“。匹配换行符”的复选框

输入:

Begin: model 17
Epoch 15800, loss 4051304.017, val_PMAE 6.9
Saving at epoch 15828 with loss: 3974847.290
Saving at epoch 15889 with loss: 3968749.471
ModelFinish: Stop training
Begin: model 18
Saving at epoch 15889 with loss: 3968749.223
Saving at epoch 15889 with loss: 3968749.200
Epoch 15800, loss 4051304.017
ModelFinish: Stop training
Begin: model 19

想要的第一场比赛:

Begin: model 17
Epoch 15800, loss 4051304.017, val_PMAE 6.9
Saving at epoch 15828 with loss: 3974847.290

想要的第二场比赛:

Begin: model 18
Saving at epoch 15889 with loss: 3968749.223

我的尝试(选中“.matches newline”):

^Begin:(?:(?!Saving.*Model).)*$

我的计划是使用 notepad++ 查找并用“”替换我不想要的文本,这样我就只剩下每个模型的最终“损失”了。 (即:模型17损失:3968749.471,模型18损失:3968749.200等)

【问题讨论】:

  • 要直到 ModelFinish 之前的最后一行,您可以使用 regex101.com/r/c3RnbS/1 但您想要的结果只匹配 Begin 或 Epoch 之后的第一行要获得这些匹配项,您可以使用 regex101.com/r/NJckKI/1
  • 怎么样:^Begin:(?:(?!ModelFinish).)*(?=^Saving)?
  • 你想要的匹配不符合要求,它们表明你想要匹配到第一行以Saving开头的ModelFinish之前
  • @WiktorStribiżew - 所写的所需匹配是正确的(恰好在两个示例中,“ModelFinish”之前的最后一个“Saving*”行的所有内容都相当于“第一个在 ModelFinish 之前以 Saving 开头的行'

标签: regex regex-lookarounds


【解决方案1】:

如果您使用 \R 匹配换行符以匹配 unicode 换行符序列,则不必启用点匹配换行符。

要在 ModelFinish 之前的最后一次出现 Saving 之前进行匹配,您可以匹配不以 ModelFinish 开头的行并使用肯定的前瞻 (?= 断言以下内容是换行符和正在保存。

^Begin:.*(?:\R(?!ModelFinish).*)*(?=\RSaving)
  • ^ 字符串开始
  • Begin:.* 匹配 Begin: 和除换行符以外的任何字符 0+ 次
  • (?:非捕获组
    • \R(?!ModelFinish) 匹配换行符并断言该行不以 ModelFinish 开头
    • .* 匹配除换行符以外的任何字符 0+ 次
  • )*关闭非捕获组并重复0+次
  • (?=\RSaving) 正向前瞻,断言右边是换行符,后跟保存

Regex demo

【讨论】:

  • 这些都不对。要求是将所有内容匹配到“ModelFinish”之前的最后一个“Saving*”行
  • @maurera 你是这个意思吗? ^Begin:.*(?:\R(?!ModelFinish).*)*(?=\RSaving)regex101.com/r/2p6Qr5/1
  • @maurera 我已经用解释更新了答案。
猜你喜欢
  • 2011-09-15
  • 2017-09-02
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-13
  • 1970-01-01
  • 2012-09-20
相关资源
最近更新 更多