Python
Как заменить букву или символ в строке Python: replace и срезы
В Python символы в строке чаще всего заменяют методом replace(). Он берет старый фрагмент, новый фрагмент и возвращает новую строку. Это важный момент: исходная строка не меняется, потому что строки в Python неизменяемые
Если нужно заменить все буквы а на о, код будет коротким
text = "мама мыла раму"
new_text = text.replace("а", "о")
print(new_text)
Результат
момо мыло рому
Короткий ответ
Общий шаблон такой
new_text = text.replace("что_заменить", "на_что_заменить")
Например
message = "Python работает плохо"
message = message.replace("плохо", "отлично")
print(message)
Результат
Python работает отлично
Мы присвоили результат обратно в message, потому что replace() не меняет строку на месте
Почему строка не меняется сама
Такой код часто удивляет новичков
text = "кот"
text.replace("к", "р")
print(text)
Результат
кот
Метод replace() создал новую строку, но мы ее никуда не сохранили. Правильно так
text = "кот"
text = text.replace("к", "р")
print(text)
Результат
рот
Как заменить только первое совпадение
У replace() есть третий аргумент — количество замен
text = "ха ха ха"
new_text = text.replace("ха", "хо", 1)
print(new_text)
Результат
хо ха ха
Если не передавать третий аргумент, заменятся все совпадения
Как удалить символ из строки
Удаление — это замена на пустую строку
phone = "+7 (999) 123-45-67"
clean_phone = phone.replace(" ", "").replace("(", "").replace(")", "").replace("-", "")
print(clean_phone)
Результат
+79991234567
Для учебной задачи цепочка replace() понятна и нормально работает. Для более сложной очистки текста можно использовать регулярные выражения, но начинать лучше с обычного replace()
Как заменить символ по позиции
Если нужно заменить не все такие буквы, а символ на конкретной позиции, replace() не подходит напрямую. Используйте срезы
text = "кот"
index = 0
new_text = text[:index] + "р" + text[index + 1:]
print(new_text)
Результат
рот
Здесь text[:index] берет часть строки до нужной позиции, новый символ вставляется посередине, а text[index + 1:] добавляет остаток строки после заменяемого символа
Как заменить несколько разных символов
Если замен немного, можно использовать цепочку replace()
text = "python, java, sql"
text = text.replace("python", "Python").replace("java", "Java").replace("sql", "SQL")
print(text)
Результат
Python, Java, SQL
Если замен много и они хранятся в словаре, удобнее пройтись циклом
text = "кот сидит на ковре"
replacements = {
"кот": "пес",
"ковре": "диване",
}
for old, new in replacements.items():
text = text.replace(old, new)
print(text)
Результат
пес сидит на диване
Как заменить регистр букв
Если задача не про конкретную букву, а про верхний или нижний регистр, используйте специальные методы строк
text = "python"
print(text.upper())
print(text.capitalize())
Результат
PYTHON
Python
replace() здесь не нужен, потому что Python уже умеет менять регистр встроенными методами
Когда нужен не replace, а регулярные выражения
replace() ищет точное совпадение. Если нужно заменить все цифры, все лишние пробелы или разные варианты написания, лучше использовать модуль re
import re
text = "Заказ 123, заказ 456"
new_text = re.sub(r"\d+", "NUMBER", text)
print(new_text)
Результат
Заказ NUMBER, заказ NUMBER
Для первого уровня replace() достаточно. Регулярные выражения подключайте тогда, когда нужно искать не конкретный символ, а шаблон
Мини-практика
Создайте файл replace_lesson.py и вставьте код
text = "Python - простой язык. python помогает писать скрипты"
text = text.replace("python", "Python")
text = text.replace("-", "—")
print(text)
Запустите файл и посмотрите результат. Потом добавьте замену слова скрипты на программы. Так вы закрепите главный принцип: replace() возвращает новую строку, а не меняет старую на месте
Частые ошибки
Первая ошибка — вызвать replace(), но не сохранить результат
text = "кот"
text.replace("к", "р")
print(text)
Вторая ошибка — ожидать, что replace() заменит только одну букву. По умолчанию он заменяет все совпадения, а для ограничения нужен третий аргумент
text = "ааа"
print(text.replace("а", "о", 1))
Третья ошибка — забыть, что регистр важен. replace("python", "Python") не заменит PYTHON, потому что это другая строка
Что почитать дальше по Python
Если нужен общий маршрут по теме, откройте рубрику Python. Для соседних задач пригодятся эти разборы:
- Как заменить элемент в списке Python: по индексу, по значению и в цикле
- Как обратиться к индексу массива в Python: списки, срезы и IndexError
- Как отправить файл с одного компьютера на другой через Python
- Как проверить первый символ строки в Python: индекс 0, startswith и пустая строка