Python用eval替换括号内的文本

时间:2018-09-01 15:33:38

标签: python regex

我有一个这样的文件(或字符串):

$((2+1))
bbb$((2+0))a()
$((1+1))$((5**2))
$((variable+1))

我希望输出是这样的(如果变量= 1):

3
bbb2a()
225
2

基本上,首先我需要在$((和))之间获取文本,我是这样做的:

re.search(rf"\$\(\((.*?)\)\)",template).group(1)

我需要用上一步中得到的值替换所有发生的情况。我该怎么做?我可以以某种方式在之前编译正则表达式并将其用于获取文本和替换文本吗?谢谢

1 个答案:

答案 0 :(得分:0)

您不需要使用任何库。您只需要使用python内置函数即可。

m = ["$((2+1))","$((2+0))","$((1+1))aa$((5**2))bb","$((0+0))"]

def OPGetter(string) :
    i = 0
    while i < len(string) :
        if string[i] == ")" :
            last = i
        i += 1
    res1 = (string[last+1:])
    #
    i = 0
    while i < len(string) :
        if string[i] == "(" :
            one = i+1
        i += 1
    i = 0
    while i < len(string) :
        if string[i] == ")" :
            two = i
            break
        i += 1
    return [string[one:two],res1]

result =[]
i = 0
while i < len(m) :
    string = m[i].split("$")
    if len(string) > 0 :
        res = string[0]
        string = string[1:]
    for item in string :
        code = "def returning() :\n    return "+ OPGetter(item)[0]
        exec(code)
        value = returning()
        res += str(value)+OPGetter(item)[1]
    result.append(res)
    i += 1

结果将是答案的最终列表。