首页 > 解决方案 > 在数学表达式中查找包含在最外层括号内的文本

问题描述

我正在尝试查找包含在函数 filt() 最外层括号内的文本。

该函数是数学表达式字符串的一部分:

math_expr = "filt(2*A) + filt(A*(B+C)) - filt((A+B)/(C+D))"

预期的输出是:

['2*A', 'A*(B+C)', '(A+B)/(C+D)']

我已经尝试在这个站点上使用几个正则表达式,我得到的最接近的输出是使用re.findall('\((.*?)\)', math_expr). 但是,正则表达式返回:

['2*A', 'A*(B+C', '(A+B', 'C+D']

有人可以帮我吗?我是正则表达式的新手,不知道还能尝试什么。谢谢!

标签: pythonregexpython-3.x

解决方案


如果您使用支持递归模式的正则表达式模块,您可以使用

regex.findall(r'\(((?:[^()]+|(?R))+)\)', math_expr)

输出:

['2*A', 'A*(B+C)', '(A+B)/(C+D)']

https://regex101.com/r/oclWxx/1

  • \(- 前括号
  • ((?:[^()]+|(?R))+)- 捕获组,重复匹配:
    • [^()]+- 除括号外的任何内容,或
    • (?R)- 整个模式,再次递归
  • \)- 尾随括号

推荐阅读