如何使用字典对字符串进行多重替换?

90 投票
9 回答
80138 浏览
提问于 2025-04-15 20:09

假设我们有:

d = {
    'Спорт':'Досуг',
    'russianA':'englishA'
}

s = 'Спорт russianA'

我该如何把字符串 s 中出现的 d 的每一个键,替换成对应的值呢?在这个例子中,结果会是 'Досуг englishA'

9 个回答

21

解决方案可以在这里找到 (我喜欢它的简单性)

def multipleReplace(text, wordDict):
    for key in wordDict:
        text = text.replace(key, wordDict[key])
    return text
28

你可以使用 reduce 这个函数:

reduce(lambda x, y: x.replace(y, dict[y]), dict, s)
114

使用正则表达式(re):

import re

s = 'Спорт not russianA'
d = {
'Спорт':'Досуг',
'russianA':'englishA'
}
keys = (re.escape(k) for k in d.keys())
pattern = re.compile(r'\b(' + '|'.join(keys) + r')\b')
result = pattern.sub(lambda x: d[x.group()], s)
# Output: 'Досуг not englishA'

这个方法只会匹配完整的单词。如果你不需要这样,可以使用下面的模式:

pattern = re.compile('|'.join(re.escape(k) for k in d.keys()))

注意,如果你的字典里有些词是其他词的一部分,那么在这种情况下,你应该按长度从长到短排序这些词。

撰写回答