除了特殊功能中的点之外,如何将所有逗号替换为点?

时间:2014-09-08 18:36:54

标签: regex string vim substitution

我试图找到一个正则表达式,将所有逗号替换为点,但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

2 个答案:

答案 0 :(得分:1)

Vim的正则表达并不是那么强大。你想要的是实际解析文本,以便你可以计算parens,以便你可以确定上下文。你将不得不推出自己的解析器。

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

答案 1 :(得分:-1)

(\©<=\)),

尝试this.it使用正向lookbehind进行检查,前面加上。