假设我有以下表达式:
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)
提前致谢。
答案 0 :(得分:4)
String result = subject.replaceAll("(-?\\d+(?:\\.\\d+)?)\\^(-?\\d+(?:\\.\\d+)?)", "Math.pow($1,$2)");
答案 1 :(得分:1)
您正在使用错误的技术完成这项工作。您需要扫描仪和表达式解析器。如果他们不是数字怎么办?如果它们是子表达式,例如log(9)^sin(2)?
如果他们在括号中怎么办?多个括号?