简单数学方程的正则表达式
我想识别整数或小数和四个简单的操作,分成标记我无法得到小数点,你能帮忙吗?
我的注册是
expression = "2.7 + 3 * (1 + 2)"; String expRegString = "\\d+(\\.\\d+)*|[\\(\\)\\+\\-\\*\\/]"; Pattern expPattern = Pattern.compile(expRegString); Matcher expMatcher = expPattern.matcher(expression); while (expMatcher.find()){ System.out.println(expMatcher.group()); }
给我"+", "3", "(" , "1", "+" , "2",")"
编辑:正确的结果将是"2.7","+", "3", "(" , "1", "+" , "2",")"
您可以尝试删除所有空格,然后将数据拆分到字符之前或之后的每个位置-
+
*
/
(
)
。
这应该可以解决问题
String expression = "2.7 + 3 * (1 + 2)"; String[] tokens = expression.replaceAll("\\s+", "").split("(?<=[-+*/()])|(?=[-+*/()])"); for (String token : tokens) System.out.println(token);
产量
2.7 + 3 * ( 1 + 2 )
它可能适合您:
expression = "2.7 + 3 * (1 + 2)"; String expRegString = "\\d+(\\.\\d+)*|\\(\\d+(\\.\\d+)*[\\+\\-\\*\\/]\\d+(\\.\\d+)*\\)";