我试图找到一个正则表达式,将所有逗号替换为点,但pow()
,log()
,sqrt()
,max()
等特殊函数中的逗号除外等
我试了这个没有成功:
let string = substitute(string, '\(pow([0-9.]\+\|log([0-9.]\+\|max([0-9.]\+\|\)\@<!\zs,\ze', '\.', 'g')
这可以替代max(x, y, z)
中的逗号,也可以替代其他特殊函数。
我想找到一个通用的正则表达式,它不会在所有特殊函数中替换逗号,而是替换字符串中所有其他逗号。
可能的输入文字:
让string = 2*3,25 + pow(2,3) + (-2,5 + max(2.25, 40, -5.3)) + 2,51/4.3
答案 0 :(得分:1)
Vim的正则表达并不是那么强大。你想要的是实际解析文本,以便你可以计算parens,以便你可以确定上下文。你将不得不推出自己的解析器。
您的另一个选择是尝试使用某种技巧来根据环境找出要替换的,
。你可以靠近s/\v,(\d+)/\1/g
。这会在之后直接查找带有数字的,
。但是,pow()
表达式失败了。
答案 1 :(得分:-1)
(\©<=\)),
尝试this.it使用正向lookbehind进行检查,前面加上。