首页 > 解决方案 > 如何同时替换多个子字符串

问题描述

我有一个字符串

a = "X1+X2*X3*X1"
b = {"X1":"XX0","X2":"XX1","X0":"XX2"}

我想用 dict b 替换子字符串 'X1,X2,X3'。

但是,当我使用下面的代码替换时,

for x in b:
    a = a.replace(x,b[x])
print(a)

'XXX2+XX1*X3'

预期结果是 XX0 + XX1*X3*XX0

我知道这是因为子字符串在循环中被替换,但我不知道如何解决它。

标签: pythonsubstring

解决方案


您可以创建一个模式,'|'然后在字典转换中搜索,如下所示。

试试这个:

import re
a = "X1+X2*X3*X1"
b = {"X1":"XX0","X2":"XX1","X0":"XX2"}

pattern = re.compile("|".join(b.keys()))
out = pattern.sub(lambda x: b[re.escape(x.group(0))], a)

输出:

>>> out
'XX0+XX1*X3*XX0'

推荐阅读