我需要从字符串中获得数学表达式。我写的是正则表达式[^[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+)*)
但是我猜,你想保留表达式之间的空格?
你可以这样做:
- 匹配所有绝对不是数学表达式的内容(它不是数字也不是运算符):
(?:[^d+-*/]+)
- 使用'负向后看'匹配前面没有数字的所有操作符:
(?<!d)[+-*/]
- 使用'负向前看'匹配所有不跟数字的操作符:
[+-*/](?!d)
最后,你可以用OR
:
将以上3个组合起来((?:[^d+-*/]+)|(?<!d)[+-*/]|[+-*/](?!d))
这应该匹配除数学表达式以外的所有内容。