我想匹配字符串中的前两个单词,除非第二个是“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
答案 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
- 一个或多个字符字符。\w+