正则表达式匹配所有内容直到字符串
Regular expression to match everything up to string
我正在尝试将所有内容匹配到 "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++ 查找我不想要的文本并将其替换为“”,这样我就只剩下每个模型的最终 "loss"。 (即:模型17损失:3968749.471,模型18损失:3968749.200等)
如果使用 \R
匹配换行符以匹配 unicode 换行序列,则不必启用匹配换行符的点。
要在 ModelFinish 之前最后一次出现 Saving 之前匹配,您可以匹配不以 ModelFinish 开头的行并使用 positive先行 (?=
断言后面是换行符和保存。
^Begin:.*(?:\R(?!ModelFinish).*)*(?=\RSaving)
^
字符串开头
Begin:.*
匹配 Begin:
和除换行符之外的任何字符 0+ 次
(?:
非捕获组
\R(?!ModelFinish)
匹配换行符并断言该行不以 ModelFinish 开头
.*
匹配除换行符以外的任何字符 0+ 次
)*
关闭非捕获组并重复0+次
(?=\RSaving)
正面前瞻,断言右边是一个换行符,然后是 Saving
我正在尝试将所有内容匹配到 "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++ 查找我不想要的文本并将其替换为“”,这样我就只剩下每个模型的最终 "loss"。 (即:模型17损失:3968749.471,模型18损失:3968749.200等)
如果使用 \R
匹配换行符以匹配 unicode 换行序列,则不必启用匹配换行符的点。
要在 ModelFinish 之前最后一次出现 Saving 之前匹配,您可以匹配不以 ModelFinish 开头的行并使用 positive先行 (?=
断言后面是换行符和保存。
^Begin:.*(?:\R(?!ModelFinish).*)*(?=\RSaving)
^
字符串开头Begin:.*
匹配Begin:
和除换行符之外的任何字符 0+ 次(?:
非捕获组\R(?!ModelFinish)
匹配换行符并断言该行不以 ModelFinish 开头
.*
匹配除换行符以外的任何字符 0+ 次
)*
关闭非捕获组并重复0+次(?=\RSaving)
正面前瞻,断言右边是一个换行符,然后是 Saving