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 паттерн внутри (?<=...) должен иметь фиксированную длину: