Сообщить об ошибке.

Метод str.replace() в Python, меняет подстроку/символ в строке

Производит поиск и замену подстроки (символа) в строке

Синтаксис:

str.replace(old, new[, count])

Параметры:

  • old - str, подстрока или символ который меняем
  • new - str, подстрока или символ на который меняем
  • count - int, сколько раз меняем

Возвращаемое значение:

Описание:

Метод str.replace() вернет копию строки, в которой все вхождения подстроки old заменены на подстроку new.

Если указан необязательный аргумент count, заменяются только первые вхождения count.

Примечание. Производить поиск и замену подстроки/символа в строке можно так же при помощи регулярных выражений, используя функцию re.sub().

Общие примеры замены подстроки/символа в строке.

# замена обратных кавычек в строке
>>> x = 'все вхождения подстроки `old` заменены на подстроку `new`'
>>> x.replace('`', '-')
# 'все вхождения подстроки -old- заменены на подстроку -new-'

# замена обратных кавычек с ограничением в 2 замены
>>> x = '2 вхождения подстроки `old` заменены на подстроку `new`'
>>> x.replace('`', '~', 2)
# '2 вхождения подстроки ~old~ заменены на подстроку `new`'

# замена нескольких значений 
>>> x.replace('old', 'старая').replace('new', 'новая')
# 'все вхождения подстроки `старая` заменены на подстроку `новая`'

Замены нескольких значений в строке одной операцией.

Для замены нескольких разных символов/подстрок в одной операции (множественная замена) необходимо определить функцию, которая будет принимать исходную строку и список символов/подстрок, каждая со своим новым значением. Символы/подстроки с новыми значениями можно передавать разными способами, например как список двойных кортежей в виде [('old', 'new'), ...] или как словарь, где ключ будет старым значением, а значение - новым {'old': 'new', ...}. В зависимости от того, в каком виде передаются значения, будет строится логика извлечения этих значений для осуществления замены в исходной строке.

В примере будем передавать символы/подстроки с их новыми значениями в виде кортежа, так как он дает больше гибкости. Гибкость будет состоять в том, что в примере будет возможность добавления количества замены каждого символа/подстроки в строке.

# примерная реализация функции множественной замены в строке
# здесь еще нужно подумать над проверкой типов в кортежах ...
def replace(line, old_new_num):
    # при итерации по списку распаковываем кортежи на
    # старое и новое значения, а так же `n` - количество замен
    for vals in old_new_num:
        # если кортежа имеет 3 элемента,
        # значит присутствует количество замен
        if len(vals) == 3:
            # распаковываем кортеж
            old, new, n = vals
            # передаем аргументы методу и 
            line = line.replace(old, new, n)
        elif len(vals) == 2:
            # распаковываем кортеж
            old, new = vals
            line = line.replace(old, new)
        else:
            # если в кортеже НЕ 2 или 3 элемента, 
            # то поднимаем исключение
            raise 'кортеж должен состоять из 2-х или 3-х элементов'
    return line

# сохраняем функцию в файл test.py и запускаем
# $ python3 -i temp.py
# исходная строка
>>> line = 'абра-абра-кад-абра'
# элементы кортежа означают: 
# ('заменяемое значение','новое значение', количество замен в строке) 
>>> replace_val = [('а', 'A', 3), ('б', 'Б'), ('кад', 'КАД')]
>>> new_line = replace(line, replace_val)
>>> new_line
# 'AБрA-AБра-КАД-аБра'

Из примера видим, что новая функция replace() работает как и ожидается, а именно символ 'а' заменился 3 раза, символ 'б' и подстрока 'кад' заменились по количеству совпадений.