Python正则报错:look-behind requires fixed-width pattern 解决方案咨询
正则修正方案
修正后的正则表达式
(?<!(?:[Yy]ellow|[Pp]urple) )(?<!(?:[Bb]lack) )(?<!(?:[Bb]lue) )(?<!(?:[Rr]ed) )[Cc]olor
修正思路
原正则报错的核心原因是负向预查(look-behind)要求匹配固定长度的模式,你原正则里的[Yy]ellow 、[Bb]lue 等子串长度不一致(比如Yellow 是7个字符,Blue 是5个字符),不符合正则引擎的要求。
解决方法是把不同长度的前缀拆分成多个独立的固定长度负向预查:
- 长度为7的前缀:
[Yy]ellow、[Pp]urple,合并到同一个(?<!...)中 - 长度为6的前缀:
[Bb]lack - 长度为5的前缀:
[Bb]lue - 长度为4的前缀:
[Rr]ed
每个独立的(?<!...)都满足固定长度要求,组合后完全实现原正则的逻辑——匹配前面不是指定颜色词加空格的[Cc]olor。
测试验证
针对你的测试用例,该正则的匹配结果如下:
Dark Color # 匹配成功 light color # 匹配成功 Blue Color # 不匹配 red color # 不匹配 that is a blue color and theme # 不匹配 opaque color # 匹配成功 purple color # 不匹配
内容的提问来源于stack exchange,提问作者cy614
相关产品推荐
相关产品推荐

