在Python中用一个大字符串替换多个字符串的推荐方法是什么?

时间:2011-10-27 18:21:44

标签: python string

我有很多字符串对和一个大字符串(这是文件的内容)。我需要用相应的第二个成员替换每一对中第一个成员的每一个出现。

例如,拥有对(“AA”,“BB”)和(“qq”,“rt”)我需要用 BB替换每次出现的 AA qq rt

对中的字符串都是唯一的,因此替换的顺序与最终结果无关。

我的python代码是最天真的 - 我连续应用string.replace方法,直到所有对都用完为止:

>>> s="frsfsdAAsdfvsdfvqqdsff"
>>> pairs=[('AA', 'BB'), ('qq', 'rt')]
>>> for p in pairs:
...   s=s.replace(p[0], p[1])
...
>>> s
'frsfsdBBsdfvsdfvrtdsff'
>>>

我认为这对于大字符串来说是一个糟糕的解决方案。任何人都可以提出更有效的建议吗?

问题是如何在Python中完成。

感谢。

1 个答案:

答案 0 :(得分:3)

您提出的解决方案还有其他问题:在第一次替换之后,结果字符串可以匹配,并且可以再次替换相同的字符。例如,如果您尝试通过设置'qq'来交换'ff'pairs = [('qq','ff'), ('ff','qq')],则您的解决方案将无法提供所需的结果。

您可以尝试这样做:

>>> d = dict(pairs)
>>> import re
>>> pattern = re.compile('|'.join(re.escape(k) for k in d))
>>> pattern.sub(lambda k:d[k.group()], s))
frsfsdBBsdfvsdfvrtdsff