Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:用不同的术语替换字符串中的嵌入函数_Python_String - Fatal编程技术网

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

Python:用不同的术语替换字符串中的嵌入函数,python,string,Python,String,我有一大堆方程(来自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))" 理想情况下,我希望能够编写一个函数

我有一大堆方程(来自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)”函数,然后根据上面的示例在方程中替换它。e、 g

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))"

有人知道如何开始吗

我认为使用两个标准工具(正则表达式和字符串格式)可以轻松完成这项工作。但是,如果它比您的示例要复杂得多,那么通过正则表达式进行解析可能会变得难看,使用具有解析语言形式结构模型的系统可能会做得更好

首先,您需要
导入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))'

你写了什么?我们不打算从scratchstart开始为您编写特定的解析器,因为这是解析的最后一部分。我不知道如何开始,并且认为其他人可能知道从哪里开始。感谢您推荐我从标记开始感谢,这非常有帮助。