質問: Pythonで1つの大きな文字列に複数の文字列を置き換えるには、どのような方法が推奨されますか? 私は多くの文字列ペアと1つの大きな文字列(ファイルの内容です)を持っています。私は、各ペアの最初のメンバーのすべての出現をそれぞれの2番目のメンバーに置き換える必要があります。 たとえば、ペア(「AA」、「BB」)と(「qq」、「rt」)を持つ場合、 **AA** のすべての出現を **BB** **qt** は **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でそれを行う方法です。** ありがとう。
回答: あなたの提案された解決策には何か間違いがあります:最初の置換が行われた後に結果の文字列が一致し、同じ文字が再び置換される可能性があります。たとえば、 `pairs = [( 'qq'、 'qq')を設定して` 'qq' と `'ff'` をスワップしようとした場合、 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 ```