我有一个由这个相当混乱的数学表达式组成的字符串
String exp = "8+-(-74/2-(-(-(34+2)*19)))";
为了成功解析字符串并对其进行评估,我需要用“!”替换每个负左括号,结果为: 8 +! - 74/2 - (!! 34 + 2) * 19)))
要符合作为否定的括号/表达式,括号前面的减号必须以运算符,行的开头或另一行开头。左括号。
到目前为止,我已经提出了这个
exp = exp.replaceAll("([-+/*^(]|^)-\(", "$1!");
...让我这样: 8 +! - 74/2 - (! - (34 + 2)* 19)))。除此之外,我已经尝试过几乎所有的东西。
答案 0 :(得分:2)
您可以将捕获组变为积极的后视:
(?<=[-+/*^(]|^)-\\(
并替换为!
。
问题在于此捕获组正在消耗您需要识别所需部件以匹配的字符。使用正面的lookbehind不会消耗匹配,因此,您不再需要替换中的$1
。