首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我需要在数学运算中得到父母之间的所有表达式。

我需要在数学运算中得到父母之间的所有表达式。
EN

Stack Overflow用户
提问于 2019-07-10 12:07:16
回答 2查看 124关注 0票数 0

我需要用scala在数学运算中得到括号之间的所有表达式。

我试着用正则表达式做这件事。它适用于如下的表达式:

(2+4)->结果:2+4

4*(3+1)->结果:3+1

但是,我不可能得到所有的值,如下面的示例所示:

(2+1)*(4-3)->结果:2+1)*(4+3

预期结果:

代码语言:javascript
运行
复制
`2+1`

`4+3`

其中“公式”是输入表达式。

代码语言:javascript
运行
复制
    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)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-10 12:25:35

  1. 您可以使用不情愿量词 *?而不是*来捕获字符,直到第一个)
  2. 在Scala中,如果使用三元引号字符串,则不需要双反斜杠,这使得regexes更加可读性:

合并:

代码语言:javascript
运行
复制
Pattern.compile("""\((.*?)\)""")
  1. 正如mrzasa的答案所提到的,如果您需要处理嵌套括号,正则表达式是一个错误的工具(但请参阅如何匹配Java中括号(嵌套)中的字符串?匹配平衡括号的正则表达式的警告)。 在Scala中,您可以使用解析器组合器代替。Huynhjl对解析嵌套括号中包含的值的回答描述了一些可以用作起点的东西。
票数 3
EN

Stack Overflow用户

发布于 2019-07-10 12:12:52

你的复仇女神太贪心了,太费劲了。试一试

代码语言:javascript
运行
复制
([^)]*)

这限制了对不是结束括号的字符的重复。

在Scala中,可能是:

代码语言:javascript
运行
复制
    val regex = Pattern.compile("\\(([\\)]*)\\)")

演示

还请注意,这不支持嵌套括号,例如(1+(2+3))

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56970366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档