Каков рекомендуемый способ замены нескольких строк в одной большой строке в Python? - PullRequest
4 голосов
/ 27 октября 2011

У меня есть много пар строк и одна большая строка (которая является содержимым файла).Мне нужно заменить каждое вхождение первого члена в каждой паре соответствующим вторым.

Например, наличие пар ("AA", "BB") и ("qq", "rt") Мне нужно заменить каждое вхождение AA на BB и 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 Ответ

3 голосов
/ 27 октября 2011

В предложенном вами решении что-то не так: после первой замены полученная строка может совпадать, и те же символы можно заменить снова.Например, ваше решение не даст желаемого результата, если вы попытаетесь поменять местами '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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...