我有一些带有${key}
形式标记的文本文件和用于键的字典。标签应替换为键选择的字典中的文本。
我找到了一种使用标签正则表达式的方法,查找字典中的键并使用相应的字典值重建字符串。这是可行的,但看起来有点笨拙。我认为预编译rex可以更有效,避免每次迭代中的两个切片。
如何使用Python函数而不是手工制作的东西来实现更具可读性?
# minimal but complete example code
import re
mydic = { 'a':'alpha', 'b':'gamma' }
s = "some text about ${a} and ${b} but not ${foo}"
while True:
sr = re.search('${(.+?)}',s)
if None == sr: # could the search result be evaluated in the while clause?
break
key = sr.group(1)
a,b = sr.span()
if key in mydic:
s = s[:a] + mydic[key] + s[b:]
else:
# found unkown key in ${}
s = s[:a] + s[b:]
# output the result
s
预期结果为"some text about alpha and gamma but not "
。
如果您的文本不包含${
的其他实例,除了在键和的开头,没有{foo}
的实例不意味着是键,您可以利用内置的str.format_map
函数:
from collections import defaultdict
d = defaultdict(str)
d.update(mydic)
s = s.replace('${', '{').format_map(d)
如果你想使用正则表达式,你可以使用re.sub
:
import re
s = re.sub(r'${(.+?)}', lambda m: mydic.get(m.group(1), ''), s)