Python 忽略正则表达式中的单词(负前瞻)

Python 忽略正则表达式中的单词(负前瞻),python,regex,regex-negation,Python,Regex,Regex Negation,我希望尝试忽略regex中的一个单词,但是我在这里看到的解决方案对我来说并不正确 我面临的问题是我有一个现有的正则表达式: (?p[A-Za-z]{3,6}-\d{3,5})(?p[A-C]{1}\b)? 这与Deku-041114-575-boku.mp4上的匹配 然而,我希望这个正则表达式不能匹配MovieCode组中包含Deku的情况 我试过了 (?P(?!Deku)[A-Za-z]{3,6}-\d{3,5})(?P[A-C]{1}\b)? 但不幸的是,它只是匹配eku-124,我需要它

我希望尝试忽略regex中的一个单词,但是我在这里看到的解决方案对我来说并不正确

我面临的问题是我有一个现有的正则表达式:

(?p[A-Za-z]{3,6}-\d{3,5})(?p[A-C]{1}\b)?

这与Deku-041114-575-boku.mp4上的匹配

然而,我希望这个正则表达式不能匹配MovieCode组中包含Deku的情况

我试过了
(?P(?!Deku)[A-Za-z]{3,6}-\d{3,5})(?P[A-C]{1}\b)?
但不幸的是,它只是匹配eku-124,我需要它失败

我的尝试有一个regex101。
MovieClose组可以匹配3-6个字符A-Z,Deku有4个字符。如果该部分不应包含Deku,则可以通过重复字符类
[a-Za-z]*
0多次来使用前面的负前瞻,因为它不能穿过
-

为了防止匹配
eku-124
,您可以在MovieClose组之前预先添加单词边界,或者添加
(?如果左侧应该有空白边界)

注意,您可以从模式中省略
{1}

\b(?P<MovieCode>(?![A-Za-z]*Deku)[A-Za-z]{3,6}-\d{3,5})(?P<MoviePart>[A-C]\b)?
\b(?P(?)[A-Za-z]*Deku[A-Za-z]{3,6}-\d{3,5})(?P[A-C]\b)?

谢谢!我已经为此奋斗了一天。我从来没有想过要这样做。开始时的单词边界也很好。如果我需要将“忽略的”单词扩展为多个,我可以这样做:
\b(?p(?)[a-Za-z]*(Deku | Boku))[a-Za-z]{3,6}-\d{3,5}(?p[a-C]\_b)?
对吗?@bitermelonman没错,如果您不需要捕获组,可以将其设置为非捕获
(?:Deku | Boku)