Regex 如何将除特殊函数中的逗号外的所有逗号替换为点?

Regex 如何将除特殊函数中的逗号外的所有逗号替换为点?,regex,string,vim,substitution,Regex,String,Vim,Substitution,我试图找到一个正则表达式,它将所有逗号替换为点,除了特殊函数中的逗号,如pow(),log(),sqrt(),max()等 我试过了,但没有成功: let string = substitute(string, '\(pow([0-9.]\+\|log([0-9.]\+\|max([0-9.]\+\|\)\@<!\zs,\ze', '\.', 'g') let string=substitute(string),\(pow([0-9.]\+\\\\\\\\\\\\;log([0-9.]\

我试图找到一个正则表达式,它将所有逗号替换为点,除了特殊函数中的逗号,如
pow()
log()
sqrt()
max()

我试过了,但没有成功:

let string = substitute(string, '\(pow([0-9.]\+\|log([0-9.]\+\|max([0-9.]\+\|\)\@<!\zs,\ze', '\.', 'g')
let string=substitute(string),\(pow([0-9.]\+\\\\\\\\\\\\;log([0-9.]\+\\\\\\;max([0-9.]\+\\\\\)\@
可能的输入文本:


让string=
2*3,25+pow(2,3)+(-2,5+max(2.25,40,-5.3))+2,51/4.3
(\)Vim的正则表达式没有那么强大。你想要的是真正解析文本,这样你就可以计算参数,这样你就可以确定上下文。你必须使用自己的解析器

(\©<=\)),

您的另一个选择是尝试并使用某种技巧,根据周围环境确定要替换的
。您可以使用
s/\v、(\d+)/\1/g
。这会在
之后直接查找带有数字的
。但是这对于
pow()
表达式来说是失败的。

这不能代替
后面的逗号()
@Remonn这正是它的功能。你能显示你正在尝试的输入吗。Vim regex不支持
?也许你的意思是
\@@vks Vim支持lookback和lookaheads,但不支持
?如果能看到一些输入和输出文本的示例,那就太好了。另外,听起来你可能正在转换数字格式,例如
,##
->
。如果是这样的话,你可以利用这个优势:
:%s/,\(\d\{3}\)/\1/g
我更新了我的问题。