在Python中运行包含在字符串中的函数

时间:2017-04-16 03:47:50

标签: python string function

所以,如果我有一个字符串:

test = "blah add(2, 3) blah add(5, 3)"

我如何处理字符串中的函数(假设add()添加了数字,我知道有" +")所以它变为:

"blah 5 blah 8"

我已经尝试通过字符串查找开放括号"("但这并不能很好地工作。

2 个答案:

答案 0 :(得分:1)

它能满足您的需求吗?

import re

def add(a, b):
    return a + b

test = "blah add(2, 3) blah add(5, 3)"
m = re.findall(r"add\((.*?)\)", test)

for item in m:
    numbers = item.split(',')
    val = add(int(numbers[0].strip()), int(numbers[1].strip()))
    test = test.replace('add(' + item + ')', str(val))

print(test)

输出:

blah 5 blah 8

答案 1 :(得分:0)

执行任意代码很危险,但假设定义了函数,您可以eval函数与re.finditer()匹配:

In [0]:
import re
def add(a, b):
    return a+b

s = "fred add(1, 2) fred add(1,8)"
{m.group(): eval(m.group()) for m in re.finditer(r"\w+\s?\(.*?\)", s)}

Out[0]:
{'add(1, 2)': 3, 'add(1,8)': 9}