如何用Python替换字符串中的动态变量

时间:2017-03-18 21:30:06

标签: python regex string variables

我使用下面的代码查找"<<"和">>"在一个字符串中,用相关的先前定义的变量替换它们。这有效,但有更安全或更有效的方法来实现这一目标吗?我已经看到有关使用eval的几个警告,我的解决方案似乎过于复杂。

import re

aa = 'alpha'
bb = 'beta'
cc = 'gamma'

teststr = 'A for <<aa>>, b means <<bb>>, and c could be <<cc>>.'

matches = re.finditer('<<(\w*)>>', teststr)

for i in matches:
    teststr = teststr.replace(i.group(0), eval(i.group(1)) )

print teststr

2 个答案:

答案 0 :(得分:1)

使用字典和lambda函数作为替换:

Date_sequence={}
for item, frame in sample_data.ix[:,2:102].iteritems():
    if frame>=sample_data.ix[:,1] and frame<=sample_data.ix[:,2]:
        Date_sequence['item'] = frame

如果您不确定>>> import re >>> teststr = 'A for <<aa>>, b means <<bb>>, and c could be <<cc>>.' >>> dico = { 'aa':'alpha', 'bb':'beta', 'cc':'gamma' } >>> re.sub(r'<<([^>]*)>>', lambda m: dico[m.group(1)], teststr) 'A for alpha, b means beta, and c could be gamma.' <<之间的每个字符串是否都是字典中的键,请将>>更改为所有可用键的替换:[^>]*。如果你需要很多键并且你不想手工制作它,你可以像这样动态地构建模式:

python 2.7:

aa|bb|cc

python 3.x:

>>> re.sub(r'<<(%s)>>'%"|".join(sorted(dico.keys(), reverse=True)), lambda x: dico[x.group(1)], teststr)

答案 1 :(得分:0)

使用dict进行替换。

import re
d = {'aa': 'alpha', 'bb': 'beta', 'cc': 'gamma'}

teststr = 'A for <<aa>>, b means <<bb>>, and c could be <<cc>>.'
matches = re.finditer('<<(\w*)>>', teststr)
for i in matches:
    teststr = teststr.replace(i.group(0), d[i.group(1)])
print(teststr)

打印A for alpha, b means beta, and c could be gamma.