尽管负前瞻,正则表达式匹配字符串

时间:2021-06-22 09:11:13

标签: javascript python regex regex-lookarounds

我想匹配字符串中的前两个单词,除非第二个是“feat”,那么我只想匹配第一个单词。

我的计划: (\w+(?: \w+))(?!feat) 不起作用。 “壮举”每次都匹配。我尝试了相同的变体,但无济于事。

这是一个示例字符串:“Technotronic feat Ya Kid K”

感谢您的帮助!

编辑:

这是它翻转的字符串: “Technotronic 壮举 Ya Kid K”

这是应该剪切字符串的代码:

pattern = re.compile("^\w+(?: (?!feat\b)\w+)?")

def cut(string):
    str = pattern.search(string).group(0)

    return str

1 个答案:

答案 0 :(得分:1)

你可以使用

\w+(?: (?!feat\b)\w+)?
\w+(?:\s+(?!feat\b)\w+)?

参见regex demo

关键是您需要限制第二个 \w+ 匹配就在 \w+ 之前的内容(因为前瞻匹配当前位置之后的文本),并且允许匹配的词 feat开头,您需要在前瞻中使用feat之后的词边界。

正则表达式详情

  • \w+ - 一个或多个单词字符
  • (?:\s+(?!feat\b)\w+)? - 一个可选的非捕获组:
    • \s+ - 零个或多个空格
    • (?!feat\b) - 紧靠右边,不能有一个完整的词 feat(因此,后续的 \w+ 不会匹配 feat 但会匹配 {{1 }})
  • feature - 一个或多个字符字符。

Python demo

\w+
相关问题