Skip to main content
 首页 » 编程设计

python之正则表达式有助于将 exp1^exp2 转换为 pow(exp1, exp2)

2024年09月03日27wayfarer

我正在将一些 matlab 代码转换为 C,目前我有一些使用 ^ 的行,这很容易用 \(?(\w*)\)?\^\(?(\w*)\)? 行的东西来做

可以很好地转换 (glambda)^(galpha) ,使用 python 中的子例程 pattern.sub(pow(\g<1>,\g<2>),'(glambda)^(galpha)')

我的问题来自嵌套括号

所以我有一个像这样的字符串:

glambdastar^(1-(1-gphi)*galpha)*(glambdaq)^(-(1-gphi)*galpha);

我不知道如何将该行转换为:

pow(glambdastar,(1-(1-gphi)*galpha))*pow(glambdaq,-(1-gphi)*galpha));

请您参考如下方法:

不幸的是,正则表达式不是处理嵌套结构的正确工具。有一些正则表达式引擎(例如 .NET)支持递归,但大多数引擎——包括 Python 引擎——不支持,并且只能处理你在表达式中构建的嵌套级别(这会很快变得丑陋).

您真正需要的是一个简单的解析器。例如,遍历字符串计数括号并将它们的位置存储在列表中。当您找到一个 ^ 字符时,将最近关闭的括号组放入“左”变量中,然后观察下一个左括号形成的组。当它关闭时,将其用作“右”值并打印 pow(left, right) 表达式。