匹配紧随目标行的两行

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

我有一个如下列表:

tttttttttttyyyyyyyyyyyyyy 28758.gif: 100.00%
tttttttttttyyyyyyyyyyyyyy 28759.gif: 98.92%
tttttttttttyyyyyyyyyyyyyy 28760.gif: 100.00%
tttttttttttyyyyyyyyyyyyyy 28761.gif: 98.54%
tttttttttttyyyyyyyyyyyyyy 28762.gif: 100.00%
tttttttttttyyyyyyyyyyyyyy 28763.gif: 98.85%
tttttttttttyyyyyyyyyyyyyy 28764.gif: 100.00%
tttttttttttyyyyyyyyyyyyyy 28765.gif: 99.91%
tttttttttttyyyyyyyyyyyyyy 28766.gif: 100.00%
tttttttttttyyyyyyyyyyyyyy 28767.gif: 100.00%
tttttttttttyyyyyyyyyyyyyy 28768.gif: 100.00%
tttttttttttyyyyyyyyyyyyyy 28834.gif: 100.00%
tttttttttttyyyyyyyyyyyyyy 28835.gif: 100.00%

以下正则表达式为包含 低于 100.00% 的百分比数字的所有行添加书签:

\b\d{2}\.\d{2}\b%
现在我需要一个正则表达式来为所有行添加书签,包括低于 100.00% 的百分比数字和目标行之后的两行

以下正则表达式可以为我的目标行以及目标行后的一行添加书签:

(?-s)(^.+\R?)\b\d{2}\.\d{2}\b%(?:\R^.+)?
我尝试了以下正则表达式,但失败了:

(?-s)(^.+\R?)\b\d{2}\.\d{2}\b%(?:\R^.+)?(?:\R^.+)
我的正则表达式问题出在哪里?

regex notepad++
1个回答
0
投票
因为您的正则表达式消耗的行百分比低于

100.00%

unmatched tttttttttttyyyyyyyyyyyyyy 28758.gif: 100.00% matched tttttttttttyyyyyyyyyyyyyy 28759.gif: 98.92% consumed tttttttttttyyyyyyyyyyyyyy 28760.gif: 100.00% consumed tttttttttttyyyyyyyyyyyyyy 28761.gif: 98.54% unmatched tttttttttttyyyyyyyyyyyyyy 28762.gif: 100.00%
请注意,第四行不匹配,因为您的正则表达式由于 

“目标行后两行” 规则而消耗了它。

有两种方法可以修复它。

1.将

“目标行后两行” 规则置于正向前瞻中

这样,目标行之后的两行仍然会被匹配和反向引用,但不会被消耗。但它会产生重叠的匹配。

(?-s)(^.+\R?)\b\d{2}\.\d{2}\b%(?=((?:\R^.+){2}))


2.匹配

“目标行之后的两行”,但排除低于 100.00%
 的行

这样它将匹配接下来的 1 到 2 行,具体取决于这些行的百分比。

(?-s)(^.+\R?)\b\d{2}\.\d{2}\b%(?:\R^(?!.*\b\d{2}\.\d{2}\b%).+){1,2}


根据您的需求,这两个应该适用于您的大多数情况。

© www.soinside.com 2019 - 2024. All rights reserved.