2

我有一个非常大的表达式,它表达了**运算符的功能,需要将其转换为使用该pow函数的代码。也就是说,我寻找一个正则表达式来查找和替换诸如a*b**N*dby之类的术语a*pow(b,N),其中N是一个整数。

这里, a, b, 和c是可能包含xy*-+()和 整数的项,并且a*,*d可能不存在。

我不知何故陷入了逃避所有这些角色的困境。我准备投入一些手动后处理,所以正则表达式应该是健壮的,但不一定是完美的。

编辑:正如 Kent 指出的那样,b包含嵌套括号时存在困难。就我而言,没有嵌套括号。这些条款都是下面评论中给出的形式。

4

3 回答 3

1

如果我理解正确,您可以尝试使用正则表达式分组来隔离要提取的类别:

所以这是正则表达式:

(a\*)(b)\*{2}(N)\*d

您可以像这样提取组:

\1pow(\2,\3)

参考组是:

\1 = (a\*)
\2 = (b)
\3 = (N)
于 2013-03-04T09:59:35.007 回答
1

你可以试试这个

正则表达式:(\([0-9xy*-]+\)|[0-9xy]+)\*\*([0-9]+)

替换为:pow($1,$2)pow(\1,\2)

于 2013-03-04T09:59:35.893 回答
1

似乎这个问题一般不能通过正则表达式来解决,因为你需要以某种方式平衡括号——这是解析器的任务。

像这样的东西可以完成没有括号的工作: %s/\(x\|y\|\d\+\)\*\*\(\d\+\)/pow(\1,\2)/gc.

像这样,如果可能只有一对括号围绕该术语: %s/\(([xy0-9+-\* ]\+)\|x\|y\|\d\+\)\*\*\(\d\+\)/pow(\1,\2)/gc

顺便说一句,它让我想起了这个问题 =)

于 2013-03-04T10:20:56.683 回答