str.replace(old, new, *, count=-1)
old - str, подстрока или символ который меняемnew - str, подстрока или символ на который меняемcount=-1 - int, количество вхождений для замены (Изменено в Python 3.13: теперь ключевой аргумент.)Метод str.replace() вернет копию строки, в которой все вхождения подстроки old заменены на подстроку new.
Если значение count не указано или равно -1, то заменяются все вхождения. Если указан, то заменяются только указанное количество вхождений.
Примечание. Производить поиск и замену подстроки/символа в строке можно так же при помощи регулярных выражений, используя функцию 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 раза, символ 'б' и подстрока 'кад' заменились по количеству совпадений.