2

假设我有以下表达式:

2^3+4
5*3 + log(9) + 32/4 - 2.1^5
44 - 22 + sin(30)*2.34 + 51.32^4 + 17*32/11

我想找到并捕获之前的 '^' 数字和之后的数字,然后将其替换为 Math.pow(captured1,captured2); 所以字符串会像:

Math.pow(2,3)+4
5*3 + log(9) + 32/4 - Math.pow(2.1,5)
44 - 22 + sin(30)*2.34 + Math.pow(51.32,4) + 17*32/11

它必须与 Java 正则表达式兼容。

我对此的看法:

寻找:

(.*\d(\.\d)?)\^(.*\d(\.\d)?)

代替:

Math.pow(\1,\2)

提前致谢。

4

2 回答 2

4
String result = subject.replaceAll("(-?\\d+(?:\\.\\d+)?)\\^(-?\\d+(?:\\.\\d+)?)", "Math.pow($1,$2)");
于 2013-09-16T20:30:51.750 回答
1

你为这项工作使用了错误的技术。您需要一个扫描仪和一个表达式解析器。如果它们不是数字怎么办?如果它们是子表达式怎么办,例如log(9)^sin(2)?如果它们在括号中怎么办?多个括号?

于 2013-09-17T01:55:32.297 回答