0Pricing
Python Academy · Урок

re.sub, флаги и скомпилированные шаблоны

Заменяйте текст, используйте флаги вроде IGNORECASE и компилируйте шаблоны для повторного использования.

«re.sub, флаги и скомпилированные шаблоны» — бесплатный урок Python Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Python Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Python Academy содержит 4 уроков всего.

Введение

re.sub заменяет совпадения. Флаги изменяют поведение поиска совпадений. Скомпилированные шаблоны эффективны при повторном использовании.

Основы re.sub

re.sub(pattern, repl, string) заменяет все совпадения на repl. Четвёртый аргумент count= ограничивает количество замен.
import re
result = re.sub(r'\d+', 'X', 'abc 123 def 456')
print(result)

re.sub с группами

Используйте \1, \2 или \g<1> в замене, чтобы вставить захваченные группы. Для именованных групп используйте \g.
import re
# Swap first and last name
result = re.sub(r'(\w+),\s*(\w+)', r'\2 \1', 'Smith, John')
print(result)

re.sub с функцией

Заменой может быть вызываемый объект: f(match) → строка замены. Это позволяет выполнять сложные преобразования.
import re
def double_num(m): return str(int(m.group())*2)
result = re.sub(r'\d+', double_num, '1 cats and 2 dogs')
print(result)

re.IGNORECASE (re.I)

Делает шаблон нечувствительным к регистру. r'hello' с re.I соответствует 'HELLO', 'Hello' и другим вариантам.
import re
print(re.findall(r'hello', 'Hello HELLO hello', re.I))

re.MULTILINE (re.M)

Заставляет ^ и $ соответствовать началу и концу каждой LINE, а не всей строки целиком.
import re
text = 'first\nsecond\nthird'
print(re.findall(r'^\w+', text, re.M))

re.DOTALL (re.S)

Заставляет . соответствовать также переводам строк. Без этого флага . останавливается на границах строк.
import re
text = 'line1\nline2'
print(re.search(r'line1.line2', text, re.S).group())

re.VERBOSE (re.X)

Разрешает добавлять в шаблон комментарии и пробелы для улучшения читаемости. Пробелы игнорируются; используйте \ и пробел для обозначения обычного пробела.
import re
pattern = re.compile(r'''
    (?P<year>\d{4})   # year
    -
    (?P<month>\d{2}) # month
    -
    (?P<day>\d{2})   # day
''', re.X)
print(pattern.search('2024-01-15').groupdict())

Объединение флагов

Объединяйте флаги с помощью |: re.I | re.M. Или используйте встроенные флаги (?im) в начале шаблона.
import re
print(re.findall(r'^\w+', 'Hello\nWorld', re.I | re.M))

re.compile() для повышения производительности

Скомпилируйте шаблон один раз с помощью re.compile(). Вызывайте методы скомпилированного объекта: pat.search(), pat.findall().
import re
email_re = re.compile(r'[\w.+-]+@[\w-]+\.[\w.]+')
emails = ['user@example.com', 'invalid', 'test@test.org']
print([e for e in emails if email_re.fullmatch(e)])

re.escape()

re.escape(string) экранирует все специальные символы регулярных выражений в строке, поэтому её можно использовать как буквальный шаблон.
import re
user_input = 'price.is $10+'
pattern = re.compile(re.escape(user_input))
text = 'The price.is $10+ today'
print(bool(pattern.search(text)))

Быстрая проверка

Какой флаг заставляет . соответствовать переводам строк в регулярных выражениях Python?

Итоги

re.sub: замена строкой, группами или функцией. Флаги: re.I (регистр), re.M (многострочный режим ^/$), re.S (точка соответствует \n), re.X (подробный режим). Компилируйте шаблоны для повторного использования.

Продолжайте

Отличная работа! Следующий урок уже ждёт Вас.

Часто задаваемые вопросы

Урок «re.sub, флаги и скомпилированные шаблоны» бесплатный?

Да — полный текст урока «re.sub, флаги и скомпилированные шаблоны» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Python Academy, подпишись на CoddyKit PRO. Курс Python Academy содержит 4 уроков всего.

Чему я научусь в уроке «re.sub, флаги и скомпилированные шаблоны»?

Заменяйте текст, используйте флаги вроде IGNORECASE и компилируйте шаблоны для повторного использования. Ты практикуешь Python Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Python Academy?

Предыдущий опыт не требуется. Python Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «re.sub, флаги и скомпилированные шаблоны»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Python Academy?

Да. Каждый урок Python Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Основы регулярных выражений
  2. Использование re.match, re.search, re.findall
  3. Группы и именованные захваты
  4. re.sub, флаги и скомпилированные шаблоны
← Назад к Python Academy