Извлекаем части совпадения и меняем текст: группы и re.sub.
Группы: скобки внутри шаблона
Часто нужно не просто найти совпадение, а вытащить из него части. Например, из даты 2024-01-15 — отдельно год, месяц и день. Для этого части шаблона оборачивают в круглые скобки — группы:
▶ groups.py
С findall группы тоже работают: если в шаблоне есть группы, он возвращает списокИзменяемая упорядоченная коллекция элементов: [1, 2, 3]. По-английски list.кортежей с содержимым групп:
▶ findall-groups.py
Замена: re.sub
re.sub(шаблон, замена, текст) — как .replace(), только по шаблону. Всё, что совпало, заменяется:
▶ sub.py
Заданиерешение.py
Напишите функцию extract_date(s), которая находит в строке дату формата гггг-мм-дд и возвращает кортеж строк (год, месяц, день). Если даты нет — верните None.
Заданиерешение.py
Напишите функцию hide_digits(s), которая заменяет каждую цифру в строке на символ *. Например, "тел. 8-912-345" → "тел. *-***-***".
📝Заметка
Когда регулярки НЕ нужны. Если ищете точный текст — хватит in и .replace(): они проще и быстрее. Регулярки берите, когда есть закономерность, а не конкретная подстрока. И не пытайтесь парсить регулярками сложные форматы вроде HTML — для них есть специальные парсеры.
❓Проверь себя
Что вернёт m.groups() для шаблона r"(\d+)-(\d+)" на строке "5-10"?
Чем re.sub отличается от str.replace?
Что делает r"\1" в строке замены re.sub?
Что запомнить
Группы ( ) вытаскивают части совпадения: m.group(1), m.groups().
findall с группами возвращает список кортежей.
re.sub(шаблон, замена, текст) — замена по шаблону; в замене работают ссылки \1, \2.
Для точного текста регулярки не нужны — хватит in и .replace().
Комментарии
Загрузка…
Загрузка комментариев…