正则表达式从字符串中捕获浮点数(并用捕获的浮点数替换)

时间:2013-09-16 20:25:37

标签: java regex

假设我有以下表达式:

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)

提前致谢。

2 个答案:

答案 0 :(得分:4)

String result = subject.replaceAll("(-?\\d+(?:\\.\\d+)?)\\^(-?\\d+(?:\\.\\d+)?)", "Math.pow($1,$2)");

答案 1 :(得分:1)

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