← Все вопросы

Как заменить подстроку в строке Python?

Задан 20 месяцев назад1.3к просмотров2 ответа
9

Нужно в строке заменить одно слово на другое, например все 'кот' на 'пёс'. Использую replace, но почему-то исходная строка не меняется. Как правильно заменить подстроку и заменить только первое вхождение?

2 ответа

14
✓ Принятый ответ — помог автору

Метод replace(старое, новое) заменяет все вхождения и возвращает новую строку:

text = 'кот сел, кот спит'
result = text.replace('кот', 'пёс')
print(result)   # 'пёс сел, пёс спит'

Вот почему «исходная строка не меняется»: строки в Python неизменяемы, replace не правит её на месте, а создаёт новую. Нужно присвоить результат:

text = text.replace('кот', 'пёс')   # вот так сохранится

Если просто вызвать text.replace(...) и не присвоить — результат потеряется, а text останется прежним. Это самая частая ошибка.

Чтобы заменить только первые N вхождений, передайте третий аргумент:

'кот кот кот'.replace('кот', 'пёс', 1)   # 'пёс кот кот' — только первое

Нюансы:

  • replace чувствителен к регистру: 'Кот' и 'кот' для него разные. Чтобы заменить без учёта регистра, нужен модуль re (re.sub с флагом re.IGNORECASE).
  • Если подстроки нет, ошибки не будет — вернётся та же строка без изменений.
  • Можно «удалить» подстроку, заменив её на пустую: text.replace(' ', '') уберёт все пробелы.

Для замены по шаблону (цифры, любые символы) используйте регулярные выражения re.sub(r'\d+', 'X', text).

4

Если нужно сделать несколько разных замен за раз, не вызывайте replace по цепочке вслепую — порядок может влиять на результат. Для пары символов удобен str.translate:

table = str.maketrans({'a': '@', 'o': '0'})
print('hello world'.translate(table))   # 'hell0 w0rld'

А для сложных шаблонов с условиями — re.sub с функцией-заменой. Но для простой задачи «заменить одно слово на другое» обычного replace с присваиванием результата вполне достаточно.

Ваш ответ

Войдите, чтобы ответить на вопрос.