0Pricing
Learn AI with Python · Урок

Группы захвата и именованные группы

Скобки для захвата, именованные группы (?P ...), re.fullmatch(), просмотр вперёд и назад.

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

Зачем нужны группы

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

В этом уроке рассматриваются захватывающие, именованные и незахватывающие группы, а также проверки окружения.

Захватывающие группы с помощью ( )

Заключите часть шаблона в круглые скобки, чтобы захватить её. Всё совпадение и каждая группа становятся доступны через объект совпадения.

import re

m = re.search("(\d{4})-(\d{2})-(\d{2})", "Date: 2026-05-29")
print(m.group())    # "2026-05-29" (whole match)
print(m.group(1))   # "2026"
print(m.group(2))   # "05"

match.group, groups, groupdict

Полезные средства доступа:

  • m.group(0) — всё совпадение целиком
  • m.group(n) — n-я захваченная группа
  • m.groups() — кортеж всех захваченных групп
import re

m = re.search("(\d{4})-(\d{2})-(\d{2})", "2026-05-29")
print(m.groups())   # ("2026", "05", "29")
year, month, day = m.groups()

Именованные группы с помощью (?P<name>...)

Нумерация групп может привести к ошибкам. Именованные группы используют (?P<name>...), чтобы обращаться к захваченным данным по осмысленному имени.

import re

m = re.search("(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})", "2026-05-29")
print(m.group("year"))   # "2026"
print(m.group("month"))  # "05"

groupdict для структурированного результата

m.groupdict() возвращает все именованные группы в виде словаря — это идеально подходит для преобразования найденного текста в структурированные записи.

import re

m = re.search("(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2})", "2026-05-29")
print(m.groupdict())
# {"year": "2026", "month": "05", "day": "29"}

Незахватывающие группы (?:...)

Иногда круглые скобки нужны только для группировки (например, чтобы применить квантификатор), но захватывать содержимое не нужно. Используйте (?:...).

Так нумерация групп остаётся понятной.

import re

# Group "ab" so + applies, but do not capture it
m = re.search("(?:ab)+(\d+)", "ababab42")
print(m.group(1))   # "42" -> group 1 is the digits, not "ab"

Обратные ссылки

Обратная ссылка \1 сопоставляется с тем же текстом, который ранее захватила группа. Это удобно для поиска повторяющихся слов.

import re

# Find a word repeated twice in a row
print(re.findall("(\w+) \1", "the the cat cat sat"))
# ["the", "cat"]

Проверка вперёд (?=...)

Положительная проверка вперёд (?=...) утверждает, что далее должно находиться определённое содержимое, но не потребляет его. Проверяемый текст не входит в совпадение.

Здесь число сопоставляется только в том случае, если после него указано "px".

import re

print(re.findall("\d+(?=px)", "10px 20em 30px"))
# ["10", "30"]  -> "20" skipped (not followed by px)

Отрицательная проверка вперёд (?!...)

Отрицательная проверка вперёд (?!...) утверждает, что далее НЕ должно находиться определённое содержимое. Сопоставляйте число только в том случае, если после него НЕ указано "px".

import re

print(re.findall("\d+(?!px)", "10px 20em 30px"))
# matches numbers not followed directly by px

Проверка назад (?<=...) и (?<!...)

Проверка назад утверждает, что находится перед совпадением, но не потребляет это содержимое:

  • (?<=...) положительная — перед ним должно находиться
  • (?<!...) отрицательная — перед ним НЕ должно находиться

Здесь мы извлекаем суммы, перед которыми стоит знак доллара, не захватывая сам знак.

import re

print(re.findall("(?<=\$)\d+", "price $50 and 60 units"))
# ["50"]  -> only the amount after $

Объединение групп и проверок контекста

В реальных экстракторах эти инструменты используются вместе. Этот шаблон извлекает именованную цену, перед которой должен стоять символ валюты, а после неё — десятичная часть:

import re

text = "Total: $1299.99 paid"
m = re.search("(?<=\$)(?P<amount>\d+)\.(?P<cents>\d{2})", text)
print(m.group("amount"), m.group("cents"))   # 1299 99

Быстрая проверка: именованные группы

Вы хотите извлекать совпадения по понятному имени, например "year", а не по номеру.

Итоги: группы и проверки контекста

Теперь Вы умеете извлекать из текста точную структуру:

  • ( ) захватывающие группы с помощью m.group(n) и m.groups()
  • (?P<name>...) именованные группы с помощью m.groupdict()
  • (?:...) незахватывающие группы для аккуратной группировки
  • Обратные ссылки \1 для повторов
  • Проверки вперёд (?=)/(?!) и проверки назад (?<=)/(?<!)

Далее: объединим всё для очистки текста перед подачей модели ИИ.

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

Урок «Группы захвата и именованные группы» бесплатный?

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

Чему я научусь в уроке «Группы захвата и именованные группы»?

Скобки для захвата, именованные группы (?P ...), re.fullmatch(), просмотр вперёд и назад. Ты практикуешь Learn AI with Python с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

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

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

Сколько времени занимает урок «Группы захвата и именованные группы»?

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

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

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

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

  1. Шаблоны регулярных выражений и классы символов
  2. Модуль re: поиск, сопоставление, поиск всех совпадений и замена
  3. Группы захвата и именованные группы
  4. Очистка текста для искусственного интеллекта с помощью регулярных выражений
← Назад к Learn AI with Python