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
我更新了我的问题。