Python“Look-Back需要固定宽度模式”-正则表达式错误

nue99wik  于 2022-10-02  发布在  Python
关注(0)|答案(2)|浏览(117)

我有这个正则表达式,如果找不到单词列表,它会匹配某个单词:

(?<![Yy]ellow |[Bb]lue |[Rr]ed |[Pp]urple |[Bb]lack )[Cc]olor

它可以工作,但我得到了正则表达式错误:“Look-Back需要固定宽度的模式”。我不能访问Python代码。我试着用(?:^|$)分隔,就像我在一个类似的问题中看到的那样,但不起作用。我还发现了this answer,我认为它解决了问题,但我不知道如何让它在我的情况下工作。

测试HERE

Dark Color          #match
light color         #match
Blue Color
red color
that is a blue color and theme
opaque color        #match
purple color
t98cgbkg

t98cgbkg1#

如果您只想要匹配,则可以使用单独的LoopBackAssert在Look Back中拆分备选方案。

如果不需要部分单词匹配,可以从单词边界\b开始

b(?<![Yy]ellow )(?<![Bb]lue )(?<![Rr]ed )(?<![Pp]urple )(?<![Bb]lack )[Cc]olor

请参阅regex demo

如果您无法控制Python代码,则可以检查匹配您不想要的内容并返回您想要的内容的捕获组是否也有效:

b(?:[Yy]ellow |[Bb]lue |[Rr]ed |[Pp]urple |[Bb]lack )[Cc]olor|([Cc]olor)

Regex demo

vmdwslir

vmdwslir2#

我可以通过使用否定的“前视”来表述您的正则表达式,从而绕过固定宽度的后视问题,它没有这个限制:

b(?!yellow|blue|red|purple|black)w+ colorb

下面是一个正在运行的Python脚本:

inp = """Dark Color
light color
Blue Color
red color
that is a blue color and theme
opaque color
purple color"""

matches = re.findall(r'b(?!yellow|blue|red|purple|black)w+ colorb', inp, flags=re.I)
print(matches)  # ['Dark Color', 'light color', 'opaque color']

相关问题