正则表达式替换“负左括号”

时间:2014-02-07 18:05:15

标签: java regex

我有一个由这个相当混乱的数学表达式组成的字符串

String exp = "8+-(-74/2-(-(-(34+2)*19)))";

为了成功解析字符串并对其进行评估,我需要用“!”替换每个负左括号,结果为: 8 +! - 74/2 - (!! 34 + 2) * 19)))

要符合作为否定的括号/表达式,括号前面的减号必须以运算符行的开头另一行开头。左括号

到目前为止,我已经提出了这个

exp = exp.replaceAll("([-+/*^(]|^)-\(", "$1!");

...让我这样: 8 +! - 74/2 - (! - (34 + 2)* 19)))。除此之外,我已经尝试过几乎所有的东西。

1 个答案:

答案 0 :(得分:2)

您可以将捕获组变为积极的后视:

(?<=[-+/*^(]|^)-\\(

并替换为!

regex101 demo

问题在于此捕获组正在消耗您需要识别所需部件以匹配的字符。使用正面的lookbehind不会消耗匹配,因此,您不再需要替换中的$1