Python 查找数学表达式中最外圆括号中包含的文本
我试图查找包含在函数filt()最外层括号内的文本 该函数是数学表达式字符串的一部分:Python 查找数学表达式中最外圆括号中包含的文本,python,regex,python-3.x,Python,Regex,Python 3.x,我试图查找包含在函数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\u expr)。但是,正则表达式返回: ['2*A', 'A*(B+C', '(A+B',
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\u expr)
。但是,正则表达式返回:
['2*A', 'A*(B+C', '(A+B', 'C+D']
谁能帮帮我吗?我对regex还不熟悉,不知道还能尝试什么。谢谢大家! 如果使用支持递归模式的regex模块,则可以使用
regex.findall(r'\(((?:[^()]+|(?R))+)\)', math_expr)
输出:
['2*A', 'A*(B+C)', '(A+B)/(C+D)']
-前括号\(
-捕获组,重复匹配:((?:[^()]+|(?R))+)
-除括号外的任何内容,或[^()]+
-整个模式再次递归(?R)
-后面的括号\)
regex.findall(r'\(((?:[^()]+|(?R))+)\)', math_expr)
输出:
['2*A', 'A*(B+C)', '(A+B)/(C+D)']
-前括号\(
-捕获组,重复匹配:((?:[^()]+|(?R))+)
-除括号外的任何内容,或[^()]+
-整个模式再次递归(?R)
-后面的括号\)
(
放入堆栈中,然后在看到时从堆栈中弹出)
我使用堆栈方法对其进行了编码。它只是将
(
放入堆栈中,然后在看到时从堆栈中弹出)
作为一个非常简单的选择
>>> import re
>>> math_expr = "filt(2*A) + filt(A*(B+C)) - filt((A+B)/(C+D))"
>>> re.findall(r'\(([\S]*?)\)(?=\s|$)', math_expr)
#OUTPUT
['2*A', 'A*(B+C)', '(A+B)/(C+D)']
作为一个非常简单的选择
>>> import re
>>> math_expr = "filt(2*A) + filt(A*(B+C)) - filt((A+B)/(C+D))"
>>> re.findall(r'\(([\S]*?)\)(?=\s|$)', math_expr)
#OUTPUT
['2*A', 'A*(B+C)', '(A+B)/(C+D)']
不要使用正则表达式使用更好、更容易的堆栈在
()
?@AlbinPaul内的表达式中是否有空格?通过使用支持递归模式的引擎,我认为使用正则表达式来实现类似的功能是很好的,如果可以简洁地实现,实际上更可取,“我喜欢你的思维方式。我也有同样的想法。不要使用正则表达式使用更好更容易的堆栈()
?@AlbinPaul通过使用支持递归模式的引擎,我认为使用正则表达式来处理类似的事情是很好的,如果可以简洁地完成,实际上更可取,“我喜欢你的思维方式。我也有同样的想法。这里,有一件T恤+1这里,有一件T恤+1