Замена всех экземпляров подстроки с помощью словаря - PullRequest
0 голосов
/ 20 декабря 2018

Я знаю, что есть способ заменить все экземпляры, которые соответствуют некоторому шаблону, например так: re.sub(r'x', 'y', string).

Но есть ли способ заменить все экземпляры, такие как #a, #b, значениями?соответствует значениям последнего символа в словаре?

dict = {'a': '1', 'b': 2', ... }

, поэтому abc#bcd#ae становится abc2cd1e и тому подобное.

Ответы [ 3 ]

0 голосов
/ 20 декабря 2018

Второй аргумент re.sub (замена для любых совпадений) может быть вызываемым.Если это так, он вызывается с одним аргументом, объектом сопоставления, для каждого совпадения, и его результат подставляется в строку.Таким образом, вы можете сделать что-то вроде:

d = {'a': 'A', 'b': 'B'}
s = '#a #b and #c'
def replace_it(m):
    return d.get(m.group('key'), m.group(0))
print re.sub('#(?P<key>[a-zA-Z]+)', replace_it, s)
0 голосов
/ 20 декабря 2018

если вы знаете точные вещи, которые хотите заменить, вам не нужно регулярное выражение.Это больше для случаев, когда вы ищете шаблоны, а не точные соответствия.string.replace должен работать для этого.

string = "a#acbb#bd"
dictionary = {'a':'1', 'b':'2'}
newstring1 = string.replace('#a', dictionary['a'])
newstring = newstring1.replace('#b', dictionary['b'])
print(newstring)
>>>a1cbb2d
0 голосов
/ 20 декабря 2018

Вы можете заменить все подходящие элементы, найденные в строке:

mydict = {'a':'1', 'b':'2'}
mystr = '#a#b'
for k, v in mydict.items():
    mystr = mystr.replace('#' + k, v)
...