应该解析数学表达式的正则表达式无法正常工作



我需要从字符串中获得数学表达式。我写的是正则表达式[^[0-9]+([\+\-\*\/][0-9])*],但由于某种原因,它也只解析*,/,-,+符号,当它们不与number相邻时。

示例:我有字符串:
"hrere 4ffwf43 12/6rr 4+2 efwfwf5343-3+5 rgwrgr54*2 rwe/fwef44efw 41+4"

将所有匹配的字符串替换为空字符串的结果是:

" 4 43 12/6 4+2 5343-3+5 54*2 / 44 41+4"

但是我不希望解析单个/

如何改进正则表达式?

String regex_to_get_expressions =
"[^[0-9]+([\+\-\*\/][0-9])*]";
String to_ch = " ";
String result = to_delete_from.
replaceAll(regex_to_get_expressions, to_ch);                                    

如果您只关心数学表达式,那么匹配它们比匹配相反的然后删除它更容易:

(d+(?:(?:*|/|-|+)d+)*)

但是我猜,你想保留表达式之间的空格?

你可以这样做:

  1. 匹配所有绝对不是数学表达式的内容(它不是数字也不是运算符):(?:[^d+-*/]+)
  2. 使用'负向后看'匹配前面没有数字的所有操作符:(?<!d)[+-*/]
  3. 使用'负向前看'匹配所有不跟数字的操作符:[+-*/](?!d)

最后,你可以用OR:

将以上3个组合起来((?:[^d+-*/]+)|(?<!d)[+-*/]|[+-*/](?!d))

这应该匹配除数学表达式以外的所有内容。

最新更新