Skip to content

Latest commit

 

History

History
39 lines (27 loc) · 2.59 KB

File metadata and controls

39 lines (27 loc) · 2.59 KB

2.10 Группирующие скобки / Именованные и нумерованные группы / Ссылки

Если шаблон регулярного выражения обернуть в круглые скобки '()' - мы сгруппируем его.

Такие группы создаются для получения дополнительной информации о них.

  • (regex) - обыкновенная скобочная группа
  • (?P<name>regex) - обычная скобочная группа, но вместе с номером ей будет присвоено имя name
  • (?P=name) - ссылка на именованную группу с именем name - ищет такой же текст, который захватила обычная скобочная группа name
  • \1 - ссылка на обычную скобочную группу по номеру (в данном случае - первую)

Условие (?(n)yes|no)

В регулярных выражениях существуют условия.

Если у группы n нашлись совпадения - возвращается шаблон до '|'.

В противном случае возвращается шаблон после '|'.

Шаблон после '|' необязателен и может быть опущен.

regex = r"(a)?(?(1)b|c)"

# Группа (a)? ищет букву a. К группе применён квантификатор ?, т.к. этой буквы может не быть в тексте
# Если в первой группе нашлась буква a, то условие (?(1)b|c) ищет букву b
# Если первая группа ничего не нашла, то условие ищет букву c

# В данном примере регулярное выражение найдёт все ab и c в тексте
regex = r"^(\[)?\d(?(1)\]|)$" # Выражение для поиска цифры в скобках или без скобок

# Группа (\[)? ищет первую скобку. К группе применён квантификатор ?, т.к. скобки может и не быть
# Условие (?(1)\]|) ищет правую скобку, если в первой группе найдена левая скобка.
# Если первая группа ничего не нашла, то условие ничего не ищет.

# Найдёт 1 и [2]
# Проигнорирует 3] и [4