Как выполняется замена фрагментов текста в Python: практическое руководство

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

Способы замены фрагментов строк в Python

Основной и самый эффективный метод для замены точной подстроки в строке в Python – str.replace(). Этот метод возвращает новую строку, в которой все вхождения старой подстроки заменены на новую. Исходная строка остаётся неизменной, так как строки в Python являются неизменяемыми объектами.

Синтаксис: str.replace(old, new, count). Параметр count необязателен и ограничивает количество замен.

s = 'Привет, мир! Мир прекрасен.'
new_s = s.replace('мир', 'вселенная')
print(new_s)
# Вывод: Привет, вселенная! Мир прекрасен.

заменить текст python (замена подстроки в строке в python)

Обратите внимание: замена чувствительна к регистру. Слово Мир не было заменено.

Типичные проблемы:

  • Если подстрока не найдена, возвращается исходная строка (без ошибки).
  • Метод не изменяет строку на месте, поэтому результат нужно присваивать новой переменной.
  • Для замены с игнорированием регистра str.replace не подходит, требуется использовать регулярные выражения.

Как заменить все вхождения по шаблону, а не по точной строке?

Для замены по шаблону (регулярному выражению) используется функция re.sub() из модуля re. Она позволяет заменять текст, соответствующий сложным правилам.

import re
s = 'Телефон: +7-123-456-78-90, другой: +7-987-654-32-10'
result = re.sub(r'\+7-\d{3}-\d{3}-\d{2}-\d{2}', '[КОНТАКТ]', s)
print(result)
# Вывод: Телефон: [КОНТАКТ], другой: [КОНТАКТ]

Python заменить число (замена числа в python (например, в строке))

Возможные ошибки:

  • Не забывайте импортировать re.
  • Специальные символы (например, точка, звёздочка) в шаблоне нужно экранировать обратной косой чертой.
  • Регулярные выражения могут работать медленнее на очень больших строках.

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

Используйте параметр count со значением 1 в методе str.replace().

s = 'один, два, один, три'
result = s.replace('один', 'раз', 1)
print(result)
# Вывод: раз, два, один, три

Python часть текста (извлечение подстроки из строки в python)

Можно также использовать re.sub() с параметром count=1, но для простой строки replace предпочтительнее.

Как заменить слово независимо от регистра?

Для замены без учёта регистра используйте re.sub() с флагом re.IGNORECASE.

import re
s = 'Python – лучший язык. Я люблю PYTHON.'
result = re.sub(r'python', 'JavaScript', s, flags=re.IGNORECASE)
print(result)
# Вывод: JavaScript – лучший язык. Я люблю JavaScript.

Print split python (использование split с print в python)

Проблема: если замена должна сохранять исходный регистр (например, заменить Python на JavaScript, оставив PYTHON -> JAVASCRIPT), потребуется более сложная функция замены с обращением к match-объекту.

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

Есть несколько способов.

Способ 1: последовательный вызов replace

s = 'Кошка и собака дружат'
result = s.replace('Кошка', 'Собака').replace('собака', 'Кошка')
print(result)
# Вывод: Собака и Кошка дружат (но это может дать неверный результат при пересечении)

код пробела python (код символа пробела в python)

Способ 2: с использованием цикла по словарю

s = 'Кошка и собака дружат'
mapping = {'Кошка': 'Собака', 'собака': 'Кошка'}
for old, new in mapping.items():
    s = s.replace(old, new)
print(s)
# Вывод: Собака и Кошка дружат

Python количество пробелов (количество пробелов в строке python)

Способ 3: через maketrans и translate – эффективен для замены отдельных символов (каждый символ заменяется ровно на один). Для подстрок разной длины не подходит.

s = 'abc123xyz'
table = str.maketrans('abc', '123')
result = s.translate(table)
print(result)
# Вывод: 123123xyz

количество символов в тексте python (подсчет количества символов в строке python)

Как заменить подстроку, используя функцию для вычисления значения замены?

В re.sub() вторым аргументом можно передать функцию, которая получает объект совпадения и возвращает строку замены.

import re
s = 'Сегодня 15.03.2025, завтра 16.03.2025'
def replace_date(match):
    # match.group() – вся найденная дата
    parts = match.group().split('.')
    return f'{parts[2]}-{parts[1]}-{parts[0]}'  # формат ISO
result = re.sub(r'\d{2}\.\d{2}\.\d{4}', replace_date, s)
print(result)
# Вывод: Сегодня 2025-03-15, завтра 2025-03-16
- символ пробел python (символ пробела в python)
- Python первое число в строке (извлечение первого числа из строки в python)
- Python лишние пробелы (удаление лишних пробелов в python)

Расширенные примеры замены подстрок в Python

1. Замена с обратными ссылками в регулярном выражении

Использование группы захвата для перестановки частей строки.

Пример
import re
s = 'Иванов Иван, Петров Пётр'
result = re.sub(r'(\w+)\s+(\w+)', r'\2 \1', s)  # меняем фамилию и имя местами
print(result)
# Вывод: Иван Иванов, Пётр Петров
Иван Иванов, Пётр Петров

2. Замена с использованием функции и сохранением регистра

Замена слова 'python' на 'JavaScript' с сохранением регистра исходного слова.

Пример
import re
def replace_preserve_case(match):
    word = match.group()
    if word.isupper():
        return 'JAVASCRIPT'
    elif word.istitle():
        return 'Javascript'
    else:
        return 'javascript'
s = 'I love Python and PYTHON is great.'
result = re.sub(r'python', replace_preserve_case, s, flags=re.IGNORECASE)
print(result)
# Вывод: I love Javascript and JAVASCRIPT is great.
I love Javascript and JAVASCRIPT is great.

3. Замена с использованием str.replace в цепочке и предотвращение пересечения

Использование временного маркера для обхода проблемы замены, когда строки пересекаются.

Пример
s = 'aaabbb'
# хотим заменить 'aa' на 'cc' и 'ab' на 'xy' (пересечение)
s = s.replace('aa', 'TEMP')  # временный маркер
s = s.replace('ab', 'xy')
s = s.replace('TEMP', 'cc')
print(s)
# Вывод: cccxyb
cccxyb

4. Замена с разделением и объединением (split и join)

Подходит, если замена должна учитывать границы слов (например, заменить слово целиком).

Пример
s = 'the quick brown fox jumps over the lazy dog'
words = s.split()
# Заменим слово 'the' на 'a', но только если оно стоит в начале или окружено пробелами
new_words = [('a' if w == 'the' else w) for w in words]
result = ' '.join(new_words)
print(result)
# Вывод: a quick brown fox jumps over a lazy dog
a quick brown fox jumps over a lazy dog

5. Замена с использованием модуля string.Template

string.Template позволяет делать шаблонную замену с помощью $ и safe_substitute.

Пример
from string import Template
t = Template('Здравствуйте, $name! Ваш заказ №$order.')
result = t.safe_substitute(name='Анна', order='12345')
print(result)
# Вывод: Здравствуйте, Анна! Ваш заказ №12345.
Здравствуйте, Анна! Ваш заказ №12345.

6. Замена с использованием регулярного выражения и границ слов (\b)

Чтобы заменить только целое слово, а не часть другого слова.

Пример
import re
s = 'cat concat catwalk'
result = re.sub(r'\bcat\b', 'dog', s)
print(result)
# Вывод: dog concat catwalk
dog concat catwalk

7. Замена с помощью bytes и bytearray (для бинарных данных)

Если требуется замена в байтовых строках, используется метод replace у bytes или bytearray (изменяемый).

Пример
b = bytearray(b'hello world')
b.replace(b'world', b'Python')
print(b)
# Вывод: bytearray(b'hello Python')
bytearray(b'hello Python')

8. Замена с подсчётом количества произведённых замен

Метод str.replace не возвращает количество, но можно использовать re.subn.

Пример
import re
s = 'a b a b a'
new_s, count = re.subn(r'a', 'X', s)
print(f'Результат: {new_s}, замен: {count}')
# Вывод: Результат: X b X b X, замен: 3
Результат: X b X b X, замен: 3

9. Замена с использованием list comprehension и условной логики

Пример замены символов с условием (заменить все цифры на звёздочку, кроме первой).

Пример
s = 'abc123def456'
result = ''.join(['*' if (ch.isdigit() and idx > 0) else ch for idx, ch in enumerate(s)])
print(result)
# Вывод: abc***def***
abc***def***

10. Замена с использованием модуля pathlib для путей файловой системы

Замена части пути с помощью PurePath.with_name или str.replace.

Пример
from pathlib import PurePosixPath
p = PurePosixPath('/home/user/docs/file.txt')
new_p = p.with_name('report.pdf')  # замена имени файла
print(new_p)
# Вывод: /home/user/docs/report.pdf
/home/user/docs/report.pdf

Замена подстроки в строке в Python - comments

En
заменить текст python (python)