Производит поиск и замену подстроки (символа) в строке.
Синтаксис:
str.replace(old, new[, count])
Параметры:
old
- str
, подстрока или символ который меняемnew
- str
, подстрока или символ на который меняемcount
- int
, сколько раз меняем
Возвращаемое значение:
Описание:
Метод
str.replace()
вернет копию строки, в которой все вхождения подстроки
old
заменены на подстроку
new
.
Если указан необязательный аргумент count
, заменяются только первые вхождения count
.
Общие примеры замены подстроки/символа в строке.
# замена обратных кавычек в строке
>>> 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 раза, символ 'б'
и подстрока 'кад'
заменились по количеству совпадений.