忽略正则表达式中的一个词(负前瞻)

Ignoring a word in regex (negative lookahead)

我想尝试忽略正则表达式中的一个词,但我在这里看到的解决方案对我来说并不适用。

Regular expression to match a line that doesn't contain a word

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

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

在 Deku-041114-575-boku.mp4 上匹配。

但是,我希望此正则表达式无法匹配 MovieCode 组中包含 Deku 的情况。

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

我的尝试有一个 regex101。 https://regex101.com/r/xqALM2/2

MovieClose 组可以匹配 3-6 个字符 A-Z,Deku 有 4 个字符。如果该部分不应该包含 Deku,您可以通过重复字符 class [A-Za-z]* 0+ 次来使用负先行,因为它不能跨越 -.

要防止匹配 eku-124,您可以在 MovieClose 组之前添加一个单词边界,或者如果左侧应该有一个空白边界,则添加 (?<!\S

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

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

Regex demo