ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Множественная замена подстрок в Python: метод .replace

Пройдите тест, узнайте какой профессии подходите и получите бесплатную карьерную консультацию
В конце подарим скидку до 55% на обучение
Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для эффективной замены нескольких подстрок используйте словарь и метод replace следующим образом:

Python
Скопировать код
zamena = {'яблоко': 'апельсин', 'банан': 'ягода'}
tekst = "яблоко и банан"

for stary, novy in zamena.items():
    tekst = tekst.replace(stary, novy)

print(tekst)  # Вывод: апельсин и ягода

В этом цикле ваша строка преобразуется поочередно, подставляя пары из словаря.

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Regex на помощь

Для выполнения сложных или обширных замен можно использовать модуль re:

Python
Скопировать код
import re

zamena = {'яблоко': 'апельсин', 'банан': 'ягода'}
pattern = re.compile("|".join(re.escape(key) for key in zamena))

tekst = "яблоко и банан в саду яблок"
tekst = pattern.sub(lambda match: zamena[match.group(0)], tekst)

print(tekst)  # Вывод: апельсин и ягода в саду апельсин

Создание единого регулярного выражения с помощью re.compile позволяет сразу заменить все совпавшие элементы, что более эффективно.

Многострочность и упорядоченные замены

Для многострочных текстов используйте флаг re.DOTALL. Если порядок замен важен, отсортируйте ключи по убыванию длины, чтобы предотвратить нежелательные замены внутри длинных ключей:

Python
Скопировать код
pattern = re.compile("|".join(sorted(re.escape(key) for key in zamena, key=len, reverse=True)), re.DOTALL)

Оптимизация для больших данных

Обработка больших объемов данных может быть оптимизирована путем однократной компиляции шаблона и его многократного применения:

Python
Скопировать код
def multiple_replace(tekst, zamena):
    pattern = re.compile("|".join(sorted(re.escape(k) for k in zamena, key=len, reverse=True)), re.DOTALL)
    return pattern.sub(lambda m: zamena[m.group(0)], tekst)

tekst = "яблоко и банан в саду яблок"
print(multiple_replace(tekst, {'яблоко': 'апельсин', 'банан': 'ягода'}))

Визуализация

Продемонстрируем это на примере скрытия email-адресов:

Исходная строка: "Свяжитесь с нами по адресу info@example.com или support@example.org"

После замены:

Python
Скопировать код
import re

tekst = "Свяжитесь с нами по адресу info@example.com или support@example.org"
pattern = re.compile(r"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b")
tekst = pattern.sub("***@***.com", tekst)

print(tekst)  # Вывод: Свяжитесь с нами по адресу ***@***.com или ***@***.com

Теперь email-адреса скрыты в соответствии с GDPR 👏

Полезные материалы

  1. Метод replace() строк в Python
  2. Какой самый эффективный способ заменить несколько символов в строке? – Stack Overflow
  3. re — Операции с регулярными выражениями — Документация Python 3.12.1
  4. 5. Структуры данных — Документация Python 3.12.1
  5. Методы строк в Python | Programiz
  6. Лямбда-функции в Python – GeeksforGeeks