python - 在数学表达式中查找包含在最外层括号内的文本
问题描述
我正在尝试查找包含在函数 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']
有人可以帮我吗?我是正则表达式的新手,不知道还能尝试什么。谢谢!
解决方案
如果您使用支持递归模式的正则表达式模块,您可以使用
regex.findall(r'\(((?:[^()]+|(?R))+)\)', math_expr)
输出:
['2*A', 'A*(B+C)', '(A+B)/(C+D)']
https://regex101.com/r/oclWxx/1
\(
- 前括号((?:[^()]+|(?R))+)
- 捕获组,重复匹配:[^()]+
- 除括号外的任何内容,或(?R)
- 整个模式,再次递归
\)
- 尾随括号
推荐阅读
- python - 尝试发送 Elasticsearch 时不可散列的类型“dict”
- python - 面试评估。难以理解挑战
- java - 如何将 GraphQL 嵌入现有的 REST 后端
- python - 如何只显示最后六个单词
- javascript - 为什么即使在设置“esponse.addHeader("Access-Control-Allow-Origin", "*");" 之后 CORS 请求也会失败 在小服务程序中?
- regex - 正则表达式必须包含子字符串
- java - 无法编辑其他 Parse User 对象,在后台保存不会写入 Parse Dashboard
- qt - 使用 Qt 创建器在 MainWindow.ui 上使用多个表单
- python - python 以什么顺序评估这个条件表达式?
- json - Go Lang 中的 JSON 结构到 csv