Что делает метод replace() в Python и как им пользоваться
Редактируем строки без лишнего кода.


Иллюстрация: Оля Ежак для Skillbox Media
Если вы недавно начали изучать Python, скорее всего, ваша первая программа выводила фразу «Hello, world!». Так бывает почти у всех. Но, полагаем, уже скоро вам захочется вывести другую строку — «Hello, job!».
Для замены одного слова на другое в Python удобно использовать метод replace(). В статье мы разберём, как это работает. Надеемся, что после его изучения вы так же легко справитесь с поиском своей первой «job».
Содержание
- Как работает функция replace()
- Как использовать метод replace()
- Практика: пишем текстовый фильтр с replace()
Как работает replace()
Метод replace() в Python — это встроенная функция для работы со строками, которая имеет следующий синтаксис:
строка.replace(что_заменить, на_что_заменить, сколько_раз_заменить)
Формально это выглядит так:
str.replace(old, new, count=-1)
Посмотрите, что здесь происходит:
- str — имя переменной, в которой хранится исходная строка. Это может выглядеть, например, так: text = "Hello, world!".
- old — подстрока, которую нужно найти и заменить. В строке Hello, world! мы будем менять слово world. А вообще, подстрокой считается любая последовательность символов внутри строки. Это может быть слово, часть слова или один символ. То есть помимо слова world в качестве подстроки мы можем выбрать Hello, lo или даже просто o.
- new — подстрока, которая подставляется вместо old. В нашем примере такой подстрокой будет слово job.
- count — необязательный параметр, который позволяет указать, сколько первых совпадений нужно заменить. Если не указывать count или явно задать count=-1, то заменятся все совпадения. Так, если в строке Python hello, hello, hello заменить hello на hi с параметром count=2, то результат будет Python hi, hi, hello. А если оставить значение по умолчанию, то мы получим Python hi, hi, hi.
В следующем разделе мы разберём примеры использования метода replace(). Чтобы лучше усвоить материал, попробуйте повторить их самостоятельно. Для этого вам нужно установить Python и выбрать редактор кода. А если не хочется ничего устанавливать, воспользуйтесь бесплатным сервисом Google Colab и запускайте код прямо в браузере.
Как использовать метод replace()
Перед рассмотрением примеров обратите внимание ещё на один момент: метод replace() чувствителен к регистру. Это значит, что он воспринимает строки World и world как разные последовательности символов, поэтому при замене будет работать только точное совпадение. А теперь к практике.
Простая подстановка слова. Завершим пример из введения и заменим наше единственное вхождение слова world на job:
text = "Hello, world!"
new_text = text.replace("world", "job")
print(new_text)
# Hello, job!
Дополнительно проверим чувствительность к регистру. Попробуем заменить job на Job и убедимся, что результат не изменится:
text = "Hello, job!"
new_text = text.replace("Job", "developer")
print(new_text)
# Hello, job!
Работа с символами. Заменим все точки в предложении на запятые и проверим, как метод replace() справится с отдельными символами:
text = "Python. Is. Easy. To. Learn!"
new_text = text.replace(".", ",")
print(new_text)
# Python, Is, Easy, To, Learn!
Частичная подстановка. Воспользуемся параметром count и немного изменим строку из песни Nirvana:
text = "Hello, hello, hello, how low"
new_text = text.replace("hello", "hi", 2)
print(new_text)
# Hello, hi, hi, how low
Множественная подстановка. Продолжим разбирать строку из песни Nirvana, но теперь заменим сразу несколько слов:
text = "Hello, hello, hello, how low\nWith the lights out, it's less dangerous\nHere we are now, entertain us"
new_text = (
text.replace("hello", "hi")
.replace("low", "high")
.replace("lights", "mood")
.replace("dangerous", "chill")
)
print(new_text)
# Hello, hi, hi, how high
# With the mood out, it's less chill
# Here we are now, entertain us
Удаление части строки. В Python пустая строка также считается строкой, поэтому с помощью replace() можно удалять ненужные фрагменты текста. Для этого достаточно указать, что мы хотим удалить, а в качестве подстановки передать пустые кавычки "". Например, уберём дефисы из телефонного номера, чтобы остались только цифры:
phone = "+7-495-123-45-67"
cleaned_phone = phone.replace("-", "")
print(cleaned_phone)
# +74951234567

Читайте также:
Мини-проект на закрепление: создаём текстовый фильтр с replace()
В реальных проектах метод replace() часто используют для обработки и преобразования текстов. Например, с его помощью можно очищать комментарии от нежелательных слов, исправлять опечатки или скрывать конфиденциальные данные: имена, номера телефонов и прочие.
Давайте создадим простой текстовый фильтр: добавим в него список нехороших фраз и будем заменять их звёздочками при вводе текста.
Шаг 1. Создадим список слов, которые программа будет искать в тексте:
bad_words = [
"php лучше python",
"пишу код без тестов",
"Stack Overflow умер",
"люблю xml",
"верстаю на диванах",
"дебажу в проде",
"всё работает, не трогай",
"написал свой фреймворк",
"просто добавь AI",
"джава лучше всех",
"всё на jQuery",
"css — это просто",
"мне не нужен ваш git",
"главное — чтобы запускалось",
"типизация мешает творчеству"
]
Шаг 2. Спросим у пользователя, что он хочет написать:
user_text = input("Введите текст: ")
Шаг 3. Пройдёмся циклом по всем словам из нашего списка и заменим их на звёздочки той же длины:
for word in bad_words:
stars = "*" * len(word)
user_text = user_text.replace(word, stars)
Шаг 4. Выведем отредактированный текст после цензуры:
print("Результат:")
print(user_text)
Теперь попробуйте вставить в поле ввода следующую фразу или придумайте свою: «Я пишу код без тестов, и всё работает, — не понимаю, зачем это нужно?» В результате вы должны увидеть много звёздочек:
Я *******************, и всё работает, — не понимаю, зачем это нужно?
Наша программа готова, но её всегда можно доработать. Попробуйте, например, добавить учёт регистра, расширить список нежелательных слов или настроить фильтрацию сразу нескольких слов в одной фразе.
Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!