正则表达式将所有内容匹配为字符串

问题描述 投票:0回答:1

我正在尝试将所有内容匹配到“ 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

我的尝试(选中“。匹配换行符”:

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

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

regex regex-lookarounds
1个回答
0
投票

如果使用\R匹配Unicode换行符序列来匹配换行符,则不必启用与换行符匹配的点。

要在ModelFinish之前在最后一次出现的[[Saving之前进行匹配,您可以匹配不是以ModelFinish开头的行,并使用肯定的前行(?=断言以下是换行符和Saving。] >^Begin:.*(?:\R(?!ModelFinish).*)*(?=\RSaving)

    [^字符串的开头
  • [Begin:.*匹配Begin:和除换行符0+次以外的任何字符
  • (?:非捕获组
    • [\R(?!ModelFinish)匹配换行并断言该行不是以ModelFinish开头
  • [.*匹配除换行符0+次以外的任何字符
  • [)*关闭非捕获组并重复0次以上
  • (?=\RSaving)正向查找,断言右边是换行符,然后是保存
  • Regex demo
  • © www.soinside.com 2019 - 2024. All rights reserved.