Замена подстроки в строке

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

Решение задачи на языке программирования Python

У строк есть метод find, который возвращает индекс первого символа подстроки в строке или -1, если подстрока не найдена.

Алгоритм решения задачи может быть таким:

  1. Находим первое вхождение подстроки в строке.
  2. Берем срез от начала строки до начала старой подстроки.
  3. Берем срез от конца старой подстроки до конца строки. Пунктами 2-3 мы как бы вырезаем старую подстроку.
  4. Соединяем начало строки, новую подстроку, конец строки.
  5. Проверяем оставшуюся часть строку на вхождение в нее старой подстроки.
things = "tree, box, chair, lamp, \n" \
         "desk, cat, dog, grass, \n" \
         "pig, box, lamp, shelf"
print(things)
print()

old_item = input("Old item: ")
new_item = input("New item: ")
len_old_item = len(old_item)

i = things.find(old_item)
while i > 0:
    before = things[:i]
    after = things[i+len_old_item:]
    things = before + new_item + after
    i = things.find(old_item)

print()
print(things)

Пример выполнения:

tree, box, chair, lamp,
desk, cat, dog, grass,
pig, box, lamp, shelf

Old item: box,
New item: cube!

tree, cube! chair, lamp,
desk, cat, dog, grass,
pig, cube! lamp, shelf

Однако на практике данную задачу проще выполнить, используя строковые методы split и join, а не find. В этом случае строка сначала "разрезается" по вхождениям старой подстроки, а потом "сшивается" с помощью новой подстроки.

things = "tree, box, chair, lamp, desk, cat, \n" \
         "dog, grass, pig, box, lamp, shelf"
print(things)

old_item = input("Old item: ")
new_item = input("New item: ")

list_of_things = things.split(old_item)
things = new_item.join(list_of_things)
print(things)

Здесь в переменную list_of_things записывается список, состоящий из подстрок исходной строки, из которой исключены строки old_item. Так если исходная строка

"белый, красный, сизый, белый, зеленый"

, и мы разделяем ее по слову "белый", то получится список

['', ', красный, сизый, ', ', зеленый']

С помощью метода join мы соединяем элементы списка через строку, к которой применяется метод. В данном случае это новая подстрока new_item.


Решение задач на Python




Все разделы сайта