Замена текста в строках Python: метод replace и его особенности

Раздел: Основы Python -> Строки

Метод replace в Python

Основной способ замены подстроки в строке - встроенный метод str.replace(old, new, count). Этот метод возвращает новую строку, в которой все вхождения old заменены на new. Необязательный параметр count ограничивает количество замен первыми вхождениями.


text = "один два один три один"
new_text = text.replace("один", "раз")
print(new_text)  # раз два раз три раз

Python strip (метод strip в python)

раз два раз три раз

Python повторить строку (повторение строки в python)

Типичная ошибка

Новички забывают присвоить результат, так как строки в Python неизменяемы. Метод не меняет исходную строку, а создаёт новую.


s = "hello"
s.replace("l", "L")  # результат не сохранён
print(s)  # hello

Tuple в str python (преобразование кортежа в строку в python)

Корректный подход: s = s.replace("l", "L")

Как заменить только первые N вхождений?

Параметр count указывает максимальное количество замен.


text = "a b a b a"
result = text.replace("a", "x", 2)
print(result)  # x b x b a

Python объект в строку (преобразование объекта в строку в python)

Как заменить несколько разных символов или букв (транслитерация)?

Метод str.translate() с таблицей, полученной через str.maketrans(), эффективно заменяет множество символов за один проход.


table = str.maketrans("абв", "ABC")
text = "абвгде"
result = text.translate(table)
print(result)  # ABCгде

Python convert string (преобразование строк в python)

Как заменить по сложному шаблону, например, с игнорированием регистра?

Модуль re предоставляет функцию re.sub, поддерживающую регулярные выражения.


import re
text = "Кот и котёнок"
result = re.sub(r"кот", "пёс", text, flags=re.IGNORECASE)
print(result)  # пёс и пёсёнок

Python str to bytes (преобразование строки в байты в python)

Предостережение

Метод replace не поддерживает регулярные выражения и регистронезависимую замену. Для этих целей используйте re.sub.

Как удалить все пробелы или лишние разделители?

Комбинация split() и join() сжимает многократные пробелы в один.


text = "   много    пробелов   "
result = " ".join(text.split())
print(repr(result))  # 'много пробелов'

функция разделить python (разделение строки на список в python)

Как заменить подстроку, если количество замен заранее неизвестно, но нужно его подсчитать?

Метод replace не возвращает количество замен. Для подсчёта можно использовать str.count или комбинацию с re.subn.


import re
text = "aa bb aa"
new_text, count = re.subn("aa", "cc", text)
print(new_text)  # cc bb cc
print(count)     # 2

вывести первый символ строки python (вывести первый символ строки в python)

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

Применение метода в цикле или с использованием спискового включения.


words = ["hello", "world", "hello"]
new_words = [w.replace("l", "L") for w in words]
print(new_words)  # ['heLLo', 'worLd', 'heLLo']
- вывести элемент строки python (вывод конкретного символа строки по индексу в python)
- задания на строки python (задания на строки в python)
- замена символов python (замена символов в строке python)

Расширенные примеры использования replace

Пример

# Пример 1: последовательные замены нескольких подстрок
text = "кошка, собака, кошка"
# Замена "кошка" на "кот" и затем "собака" на "пёс"
text = text.replace("кошка", "кот").replace("собака", "пёс")
print(text)  # кот, пёс, кот
кот, пёс, кот
Пример

# Пример 2: замена с помощью re.sub с функцией обратного вызова
import re
def uppercase_match(match):
    return match.group(0).upper()

text = "привет, мир!"
result = re.sub(r"[а-яё]+", uppercase_match, text)
print(result)  # ПРИВЕТ, МИР!
ПРИВЕТ, МИР!
Пример

# Пример 3: замена только целых слов (с границами слова)
text = "кот котёнок котик"
result = re.sub(r"\bкот\b", "пёс", text)
print(result)  # пёс котёнок котик
пёс котёнок котик
Пример

# Пример 4: удаление всех цифр через replace с пустой строкой
text = "abc123def456"
import string
for digit in string.digits:
    text = text.replace(digit, "")
print(text)  # abcdef
abcdef
Пример

# Пример 5: замена с учётом контекста (замена "SSL" только в URL)
import re
text = "Используйте SSL. URL: https://ssl.example.com"
result = re.sub(r"(?<=https://)ssl", "TLS", text, flags=re.IGNORECASE)
print(result)  # Используйте SSL. URL: https://TLS.example.com
Используйте SSL. URL: https://TLS.example.com
Пример

# Пример 6: замена с сохранением заменённых фрагментов (использование групп)
text = "дата: 2024-01-15"
result = re.sub(r"(\d{4})-(\d{2})-(\d{2})", r"\3.\2.\1", text)
print(result)  # дата: 15.01.2024
дата: 15.01.2024
Пример

# Пример 7: замена в больших текстах (эффективность replace vs translate)
import time
big_text = "a" * 10_000_000 + "b" * 10
# Замена 'a' на 'A'
start = time.time()
big_text.replace("a", "A")
print(f"replace: {time.time() - start:.3f} сек")
# Замена с помощью translate
table = str.maketrans("a", "A")
start = time.time()
big_text.translate(table)
print(f"translate: {time.time() - start:.3f} сек")
replace: 0.120 сек
translate: 0.085 сек

Метод replace в Python - comments

En
метод replace python (python)