正则表达式问题:匹配低于100.00%的行及后续两行失败求因
正则表达式问题:匹配含低于100%的行及其后两行失败原因
测试文本
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% - 匹配目标行及其后一行:
(?-s)(^.+\R?)\b\d{2}\.\d{2}\b%(?:\R^.+)?
你尝试的失败正则
(?-s)(^.+\R?)\b\d{2}\.\d{2}\b%(?:\R^.+)?(?:\R^.+)
失败原因分析
你的正则核心问题是最后一个(?:\R^.+)是强制匹配,而前面的(?:\R^.+)?是可选匹配,这会导致两种问题:
- 如果目标行是文本的最后一行(后面无内容),正则直接匹配失败,连目标行本身都无法选中。
- 如果目标行后面只有1行内容,正则要求必须再匹配第二行,同样会匹配失败,无法选中目标行和仅有的一行后续内容。
另外,前面的(^.+\R?)可以简化——在(?-s)模式下(.不匹配换行),^.+已经能匹配整行内容,\R?的作用是匹配行尾换行符,但不影响核心功能,只是不够简洁。
修正后的正则
如果需要匹配目标行及其后最多两行(不管后面是否有足够的行),可以改成:
(?-s)^.+\b\d{2}\.\d{2}\b%(?:\R^.+){0,2}
这个正则的逻辑是:匹配含低于100%的行,然后可选匹配0到2行后续内容,能覆盖所有场景。
内容的提问来源于stack exchange,提问作者Pubg Mobile
相关产品推荐
相关产品推荐

