我需要用scala在数学运算中得到括号之间的所有表达式。
我试着用正则表达式做这件事。它适用于如下的表达式:
(2+4)
->结果:2+4
4*(3+1)
->结果:3+1
但是,我不可能得到所有的值,如下面的示例所示:
(2+1)*(4-3)
->结果:2+1)*(4+3
预期结果:
`2+1`
`4+3`
其中“公式”是输入表达式。
val regex = Pattern.compile("\\((.*)\\)")
val regexMatcher = regex.matcher(formula)
while (regexMatcher.find()) {
println(regexMatcher.group(1)); //Fetching Group from String
}
编辑:如果是(1+(2+3))
,最好的结果是1+(2+3)
发布于 2019-07-10 12:25:35
*?
而不是*
来捕获字符,直到第一个)
。合并:
Pattern.compile("""\((.*?)\)""")
发布于 2019-07-10 12:12:52
你的复仇女神太贪心了,太费劲了。试一试
([^)]*)
这限制了对不是结束括号的字符的重复。
在Scala中,可能是:
val regex = Pattern.compile("\\(([\\)]*)\\)")
还请注意,这不支持嵌套括号,例如(1+(2+3))
https://stackoverflow.com/questions/56970366
复制相似问题