Python:用不同的术语替换字符串中的嵌入式函数



我有一堆方程(来自Eviews(,我需要解析并转移到另一种语言中。它们以字符串形式导入,例如:

a = "series1=0.173*d(series1,0,1)+0.010*d(series2,0,2)"

我遇到的问题是替换方程中的嵌入式 eviews 函数。我需要找到一种方法将"d(series2,0,1("Eviews函数转换为其他语言可读的格式。具体说来

"d(series2,0,x)" --> "(series2 - series2(-x))"
理想情况下,我希望能够编写一个函数,该函数

接受一个方程字符串(如上面的第一行(,检测方程中是否有"d(series,0,x("函数,然后根据上面的例子将其替换为方程。

a = "series1=0.173*d(series1,0,1)+0.010*d(series2,0,2)"
def function(a):
    blah blah
function(a) --> "series1=0.173*(series1 - series1(-1))+0.010*(series2 - series2(-2))"

有人知道如何开始吗?

我认为您可以使用两个标准工具轻松做到这一点:正则表达式和字符串格式。但是,如果它比你的示例复杂得多,那么通过正则表达式进行解析可能会变得丑陋,并且使用具有解析语言形式结构模型的系统可能会做得更好。

首先,您需要import re,然后创建一个正则表达式,该正则表达式与您正在寻找的函数字符串匹配,并将变量部分放入组中进行提取。对于您提到的案例,这是一个简单的问题:

>>> regex = re.compile(r'd((w+),d+,(d+))')
>>> arg_sets = regex.findall(a)
>>> arg_sets
[('series1', '1'), ('series2', '2')]

这是 python 正则表达式的官方文档,这里有一个可以帮助您构建它们的工具(还有其他工具,这只是我在 python 模式下找到的第一个(。

获得正则表达式后,您可以使用格式字符串中的结果来获取所需的输出,例如

>>> format_string = "({first} - {first}(-{third}))"
>>> format_string.format( **dict(zip(['first', 'third'], arg_sets[0])))
'(series1 - series1(-1))'

最新更新