我有一个非常大的表达式,表达了**
运算符的功能,需要将其转换为使用pow
函数的代码。也就是说,我寻找一个正则表达式来查找和替换a*b**N*d
之类的术语a*pow(b,N)
,其中N
是一个整数。
此处,a
,b
和c
是可能包含xy*-+()
和整数的字词,而a*
,*d
可能不是本。
我在某种程度上坚持逃避所有这些角色。我准备投入一些手动后处理,因此正则表达式应该是健壮的,但不一定完美。
编辑:正如肯特指出的那样,当b
包含嵌套括号时存在困难。在我的情况下,没有嵌套括号。这些条款都是以下评论中给出的所有形式。
答案 0 :(得分:1)
如果我理解正确,您可以尝试使用正则表达式分组来隔离要提取的类别:
所以这是正则表达式:
(a\*)(b)\*{2}(N)\*d
您可以像这样提取组:
\1pow(\2,\3)
参考组是:
\1 = (a\*)
\2 = (b)
\3 = (N)
答案 1 :(得分:1)
你可以试试这个
正则表达式:(\([0-9xy*-]+\)|[0-9xy]+)\*\*([0-9]+)
替换为:pow($1,$2)
或pow(\1,\2)
答案 2 :(得分:1)
似乎这个问题通常无法通过正则表达式解决,因为你需要以某种方式平衡parens - 这是解析器的任务。
这样的事情可以完成没有任何事情的工作:
%s/\(x\|y\|\d\+\)\*\*\(\d\+\)/pow(\1,\2)/gc
。
类似这样的话,如果这个词周围只有一对parens:
%s/\(([xy0-9+-\* ]\+)\|x\|y\|\d\+\)\*\*\(\d\+\)/pow(\1,\2)/gc
BTW它让我想起this一点问题=)