模式没有按需分割,无法用+分割

我有以下代码:

Pattern pattern = Pattern.compile("\\d+(?:\\.\\d+)?(\\s\\d+(?:\\.\\d+)?)*\\s*[-\\+\\*/\\$£]"); String input = "4.0 5.0 2.0 / + 7.0 - 11.0 34.0 2.0 / 3.0 / 1.0 * +"; Matcher matcher = pattern.matcher(input); List output = new ArrayList(); while (matcher.find()) { output.add(matcher.group()); } 

编译的模式经历了多次迭代,在它的当前迭代中,它将以下内容添加到列表中:

 [4.0 5.0 2.0 /, 7.0 -, 11.0 34.0 2.0 /, 3.0 /, 1.0 *] 

它应该被所有操作拆分并将操作保持在拆分字符串中,所以我希望得到以下输出:

 [4.0 5.0 2.0 /,+, 7.0 -, 11.0 34.0 2.0 /, 3.0 /, 1.0 *, +] 

当它只找到一个运算符而不是一个数字时,它看起来不会分裂。

所以基本上我想要当前的行为以及它分割运算符,如果它连续找到2个运算符,它就会将它们分开。 如下:

 2 2 + / 3 + 

会平等的

 [2 2 +, /, 3 +] 

你可以使用这个正则表达式:

 ((?:\d+(?:\.\d+)?(?:\s+\d+(?:\.\d+)?)*)?\s*[-+*/$£]) 

RegEx演示

在Java中它将是:

 Pattern pattern = Pattern.compile ( "((?:\\d+(?:\\.\\d+)?(?:\\s+\\d+(?:\\.\\d+)?)*)?\\s*[-+*/$£])" ); 

也许我错过了一些东西,但从你描述的内容来看,我不明白为什么它需要如此复杂。 "[\\d. ]+?[-+/*£$]"似乎完全符合您的要求。