javascript - 尽管负前瞻,正则表达式仍匹配字符串
问题描述
我想匹配字符串中的前两个单词,除非第二个单词是“feat”,然后我只想匹配第一个单词。
我的计划:
(\w+(?: \w+))(?!feat)
行不通。“壮举”每次都会匹配。我尝试了相同的变体,但无济于事。
这是一个示例字符串:“Technotronic feat Ya Kid K”
谢谢您的帮助!
编辑:
这是它翻转的字符串:“Technotronic feat Ya Kid K”
这是应该剪切字符串的代码:
pattern = re.compile("^\w+(?: (?!feat\b)\w+)?")
def cut(string):
str = pattern.search(string).group(0)
return str
解决方案
您可以使用
\w+(?: (?!feat\b)\w+)?
\w+(?:\s+(?!feat\b)\w+)?
请参阅正则表达式演示。
关键是您需要限制第二个\w+
匹配的\w+
内容(因为前瞻匹配当前位置之后的文本),并且要允许匹配以 开头的单词,您 feat
需要feat
在前瞻中使用单词边界。
正则表达式详细信息:
\w+
- 一个或多个单词字符(?:\s+(?!feat\b)\w+)?
- 一个可选的非捕获组:\s+
- 零个或多个空格(?!feat\b)
- 紧靠右边,不能有一个完整的单词feat
(所以,后面的\w+
不会匹配feat
但会匹配feature
)
\w+
- 一个或多个单词字符。
请参阅Python 演示:
import re
pattern = re.compile(r"^\w+(?: (?!feat\b)\w+)?")
def cut(text):
m = pattern.search(text)
if m:
return m.group(0)
return string
print(cut("Technotronic feat Ya Kid K")) # => Technotronic
print(cut("Technotronic feature Ya Kid K")) # => Technotronic feature
推荐阅读
- r - R:带有隐藏字段的 Web 抓取 .aspx 表单,“未知字段名称”错误
- mysql - 错误代码:1822。添加外键约束失败。引用表 'Works' 中的约束 'project_ibfk_1' 缺少索引
- python - Geopandas - 在与多边形相交处分割线,在新链接属性中保留多边形 ID
- python - 如何使用 BeautifulSoup 加快解析速度?
- javascript - 尝试提取连续子数组时返回的循环对象数组
- python - Python在表格行中查找数据
- javascript - React textarea组件无法水平扩展
- gemfire - 两个不同局域网的 Gemfire 配置
- regex - 有什么方法可以在 redux 表单中创建多个字段的相同名称,例如 name="fieldName[ ]" ?
- react-native - React Native getParam() 函数未定义