所以,如果我有一个字符串:
test = "blah add(2, 3) blah add(5, 3)"
我如何处理字符串中的函数(假设add()
添加了数字,我知道有" +")所以它变为:
"blah 5 blah 8"
我已经尝试通过字符串查找开放括号"("但这并不能很好地工作。
答案 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}