【发布时间】: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 开头的行'