Vim正则替换无法匹配含.size的ones调用问题排查
问题根源:
\w\+无法匹配带点号的标识符 你的Vim替换命令里用了\w\+来捕获括号里的参数,但\w在Vim正则里只匹配字母、数字和下划线,而xi.size里的.不在这个范围内,所以第二个捕获组根本抓不到xi.size,自然就匹配不到ones(1,xi.size)这种带点的情况。
修复后的替换命令
把匹配参数的\w\+换成[^,)]\+就可以解决问题,这个模式表示匹配除了逗号和右括号之外的任意字符,能覆盖所有合法的参数内容(包括带点的标识符、数字等):
%s/ones(\([^,)]\+\),\([^,)]\+\))/np.ones([\1,\2])/gc
为什么这个改动有效?
[^,)]是一个否定字符集,意思是“不是逗号或右括号的任意字符”- 每个参数要么是从左括号后到逗号前,要么是从逗号后到右括号前,所以用
[^,)]\+就能精准捕获每个参数的完整内容,不管参数里有没有点号、下划线或者其他合法字符 - 测试验证:这个命令既会匹配
ones(3,1)替换成np.ones([3,1]),也能匹配ones(1,xi.size)替换成np.ones([1,xi.size]),完全符合你的需求。
内容的提问来源于stack exchange,提问作者kksagar
相关产品推荐
相关产品推荐

