Статья Автор: Деникина Н.В., Деникин А.В.

13. Итоговый шаблон решения и шпаргалка по паттернам

import re
from collections import Counter

# Чтение файла
with open('input.txt') as f:
    s = f.read().strip()

# ===== Паттерн 1: Максимальная длина =====
matches = re.findall(r'PATTERN', s)
if matches:
    result = max(len(m) for m in matches)

# ===== Паттерн 2: Подсчёт =====
count = len(re.findall(r'PATTERN', s))

# ===== Паттерн 3: С позициями =====
for m in re.finditer(r'PATTERN', s):
    print(m.group(), m.start(), m.end())

# ===== Паттерн 4: Числа с фильтрацией =====
nums = [int(x) for x in re.findall(r'\d+', s)]
filtered = [n for n in nums if УСЛОВИЕ]
result = max(filtered)

# ===== Паттерн 5: Частотный анализ =====
items = re.findall(r'X(.)', s)
char, cnt = Counter(items).most_common(1)[0]
print(f"{char}{cnt}")

# ===== Паттерн 6: Группы =====
for m in re.finditer(r'(группа1)(группа2)', s):
    print(m.group(1), m.group(2))

print(result)

Шпаргалка по паттернам

Задача Паттерн
Цепочка из символа X X+
Цепочка из множества [ABC]+
Цепочка БЕЗ символов [^XY]+
Повторяющийся паттерн (?:ABC)+
Любой символ между A.B
Альтернатива ABC|XYZ
Число \d+
Одинаковые подряд (.)\1+
Символ после X X(.)
Hex-число [0-9A-Fa-f]+
IP по маске 192\.168\.\d+\.\d+
С позициями finditer()

Просмотр с пересечением 

Синтаксис Название Описание
(?=...) lookahead + после есть паттерн
(?!...) lookahead − после нет паттерна
(?<=...) lookbehind + перед есть паттерн
(?<!...) lookbehind − перед нет паттерна

Запомнить:

  • = — положительный (есть)
  • ! — отрицательный (нет)
  • < — назад (lookbehind)
  • без < — вперёд (lookahead)

Ограничение lookbehind: в Python паттерн внутри (?<=...) должен иметь фиксированную длину:

Печать