有效地使用字典中的正则表达式



我有一些带有${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)

最新更新