正则表达式未匹配全部字符:为何结果是cbbbbbb而非ccbbbbbb?
问题分析与解决方法
原正则匹配结果不符合预期的核心原因是:(?:.*)是贪婪匹配,会尽可能多地消耗字符串内容,直到遇到最后一个能让后续正则(c+b{3,})匹配成功的位置——也就是只留下最后一个c和后面的bbbbbb,所以捕获结果是cbbbbbb。
要匹配目标ccbbbbbb,可以用以下两种简洁的方法:
方法1:利用字符串结尾定位
直接匹配字符串末尾的连续c+连续b(至少3个),正则改为r"(c+b{3,})$":
import re s = "aaacccbbbbccbbbbbb" print(re.search(r"(c+b{3,})$", s).group(1))
运行结果:ccbbbbbb
方法2:限制前置匹配的结尾字符
把前置的贪婪匹配(?:.*)改为(?:.*[^c]),让它匹配到最后一个非c字符为止,这样后续的c+就能完整捕获目标位置的所有连续c:
import re s = "aaacccbbbbccbbbbbb" print(re.search(r"(?:.*[^c])(c+b{3,})", s).group(1))
运行结果:ccbbbbbb
内容的提问来源于stack exchange,提问作者Lookasz_BL
相关产品推荐
相关产品推荐

