Разбираем регулярные выражения на примерах ЕГЭ
11
Регулярные выражения на примерах ЕГЭ: зачем они вообще

** изображение создано или обработано с помощью ИИ.
К регулярным выражениям я пришёл не от любви к сложным конструкциям, а потому что устал писать громоздкие циклы. Задачи с текстовыми файлами на первый взгляд кажутся простыми, но код разрастается — проверки индексов, условия, обработка краёв. Это работает, но занимает много места.
В экзаменационных заданиях часто требуется найти цепочки символов, измерить длину фрагмента или проверить, соответствует ли строка определённому формату. Классический способ (циклы и срезы) честен и надёжен. Однако регулярное выражение может решить ту же задачу одной компактной строкой.
Важное уточнение: регулярные выражения — не магия и необязательный элемент подготовки. Это инструмент для поиска по шаблону. Он становится полезным, когда условие требует: «найдите подстроки, где есть буквы и цифры», «найдите повторяющиеся символы», «проверьте, что строка начинается с цифры и заканчивается буквой».
А на экзамене так можно? Вы можете использовать любой язык и любые приёмы, которые знаете. Главное — получить правильный ответ за разумное время.
Однако перед экзаменом проверьте свой способ на типовых файлах из открытых источников. И не пытайтесь выучить регулярные выражения в последнюю ночь. Ночь нужна для сна, а не для борьбы со скобками.
Где это применяется на ЕГЭ. Регулярные выражения чаще всего экономят время в Задании 24 (обработка символьных строк из файла). Там требуется искать непрерывные фрагменты, считать их длину, проверять наличие/отсутствие конкретных символов или групп. Вместо 10 строк циклов и условий часто хватает одной строки re.findall().
Базовый синтаксис regex: шпаргалка для задания

** изображение создано или обработано с помощью ИИ.
Что такое регулярное выражение. Оно описывает не одну конкретную строку, а целый набор строк. Например, шаблон AB найдёт ровно фрагмент AB. Никакого фокуса — просто поиск текста.
- Точка (.) — любой один символ. Шаблон A.B подойдёт для ACB, A7B, A_B. Но не подойдёт для AB, потому что между A и B нужен ровно один знак.
- Квадратные скобки ([]) — выбор одного символа из набора. Шаблон [ABC] означает A, B или C. [0-9] — любая цифра. [A-Z] — любая заглавная латинская буква (если файл содержит латиницу).
- Плюс (+) — один или больше повторов. [AB]+ найдёт A, B, ABA, BBBBA.
- Звёздочка (*) — ноль или больше повторов. Полезна, но коварна: новички часто получают пустые совпадения и не понимают, почему.
- Фигурные скобки ({}) — точное количество повторов. A{3} ищет AAA. A{2,5} ищет от двух до пяти букв A подряд. Для задач с фиксированной длиной — настоящий подарок.
Короткая памятка:
- . — любой один символ.
- [ABC] — один символ из набора.
- + — один или больше повторов.
- * — ноль или больше повторов.
- {m,n} — от m до n повторов.
Если хочется тренироваться системно, а не героически страдать в одиночку — посмотрите курс подготовки к ЕГЭ по информатике в онлайн-формате. Это не магия и не заклинание. Это прямой маршрут, где такие вещи разбирают спокойнее, чем я после третьей кружки кофе.
Курс даёт структуру, расписание и обратную связь. Вы перестаёте гадать, правильный ли у вас шаблон, и начинаете уверенно применять регулярные выражения там, где они действительно экономят время. Система уже существует. Осталось сделать шаг.
Как читать условие задачи и переводить его в шаблон

** изображение создано или обработано с помощью ИИ.
Главный навык — не запоминать значки, а переводить русский текст в строгие условия. Я прошу ученика сначала проговорить задачу вслух. Звучит странно, но работает.
Пример. Нужно найти последовательность из букв A и B. Алфавит понятен: [AB]. Если длина не меньше трёх, добавляем повтор: [AB]{3,}. Шаблон готов.
- Если сказано «не содержит C». Не паникуйте. Можно искать блоки из любых символов, кроме C. Для этого используется отрицание в квадратных скобках: [^C]+. Крышка ^ внутри скобок означает «кроме». Вне скобок у неё другое значение — так что позиция важна.
- Если есть начало и конец фрагмента. Например, фрагмент начинается с A и заканчивается B. Шаблон: A[ABCD]*B. Между границами перечислены допустимые символы.
А если внутри нельзя две одинаковых буквы подряд? Здесь регулярное выражение усложняется. Иногда проще написать обычный цикл. Не нужно доказывать компьютеру свою крутость. На экзамене побеждает не самый красивый код, а верный ответ.
Мой порядок действий:
- Определить алфавит фрагмента (какие символы могут встречаться).
- Понять границы (чем начинается и заканчивается).
- Записать повторы (сколько раз минимум и максимум).
- Проверить запреты (чего быть не должно).
- Прогнать на маленьком примере.
Последний пункт спасает чаще, чем кажется. Маленькая строка показывает ошибку быстрее любого умного комментария.
Пример с максимальной длиной фрагмента

** изображение создано или обработано с помощью ИИ.
Возьмём типичную задачу. Дан файл из символов A, B, C, D. Нужно найти максимальную длину непрерывной цепочки, в которой нет буквы D.
Шаблон [^D]+ находит все фрагменты без D. Дальше остаётся пройти по совпадениям и взять максимальную длину. В Python для этого используется модуль re — он входит в стандартную библиотеку, ничего дополнительно устанавливать не нужно. Логика:
- Прочитать строку из файла.
- Применить re.findall с шаблоном [^D]+.
- Посчитать длину каждого найденного фрагмента.
- Вывести наибольшее значение.
Если совпадений нет, нужно аккуратно обработать пустой список. В экзаменационных данных обычно есть содержательный текст, но защита не помешает.
Почему это удобно. Мы не сравниваем каждый символ вручную. Шаблон сам делит текст по запрещённой букве. Код становится короче, а логика решения видна сразу.
Нюанс. Если в файле есть символ перевода строки, он тоже считается символом. Часто строку читают через .read() и затем применяют .strip(). Это убирает лишние пробелы и переносы по краям. Внутренние символы (в середине строки) остаются на месте.
Я видел, как ученик потерял балл из-за одного переноса строки. Он сказал: «Компьютер меня не понял». Компьютер понял слишком буквально. У машин нет чувства контекста, они работают ровно с тем, что вы им дали.
Пример с группами, парами и повторениями

** изображение создано или обработано с помощью ИИ.
Теперь усложним. Пусть нужно найти цепочки, которые состоят из повторяющихся пар AB или CD. Здесь помогает группировка. Круглые скобки объединяют часть шаблона в один блок.
Шаблон (AB|CD)+ означает: одна или больше пар, где каждая пара — это AB или CD. Вертикальная черта | работает как «или». Такой шаблон найдёт AB, CDAB, ABCDCD.
Если нужна ровно три пары подряд, пишем (AB|CD){3}. Длина найденного фрагмента будет шесть символов. Это удобно для условий про блоки фиксированного размера.
Важная ловушка. Регулярные выражения обычно находят непересекающиеся совпадения. В строке ABABAB шаблон (AB)+ найдёт всю строку — здесь всё хорошо. Но при поиске сложных фрагментов перекрытия могут потеряться. Тогда приходится либо сдвигать старт вручную, либо использовать механизм просмотра вперёд.
Просмотр вперёд выглядит как (?=…). Он проверяет шаблон, но не забирает символы в результат. Через него можно искать совпадения с каждой позиции. Для школьных задач это иногда полезно, но я не советую начинать с него. Освойте сначала базовые конструкции.
Мой подход. Решите задачу простым способом (циклы, срезы). Потом сравните с regex-версией. Если ответы совпали — хорошо. Если нет — виноват не всегда компьютер. Иногда виноваты наши ожидания. Это неприятно, но честно.
Регулярное выражение должно помогать, а не превращать код в заклинание. Если шаблон стал длиннее самого условия, сделайте паузу. Возможно, обычный цикл будет понятнее и надёжнее для экзамена.
Типичные ошибки, которые я вижу у учеников

** изображение создано или обработано с помощью ИИ.
Первая ошибка — жадность квантификаторов. Плюс и звёздочка захватывают максимально длинный фрагмент. Это штатное поведение, но новички часто ожидают, что шаблон остановится раньше. Шаблон так не думает.
Вторая ошибка — забытое экранирование. Точка, скобки, плюс, звёздочка — спецсимволы. В Python для regex всегда используйте сырые строки: r»[A-Z]+d{2}». Тогда обратный слеш не нужно удваивать, а шаблон читается как есть. Это правило №1 для чистого кода.
Третья ошибка — неверный алфавит. В условии могут быть только цифры и заглавные латинские буквы. Тогда шаблон [A-Z0-9]+ выглядит разумно. Но если в файле встречаются другие знаки (пробелы, дефисы, знаки препинания), они разорвут цепочку.
Четвёртая ошибка — проверка только на одном примере. Один тест часто льстит нам. Составьте короткие строки вручную. Обязательно включите крайние случаи: пустой фрагмент, ровно один символ, запрещённый символ в начале, запрещённый в конце.
Пятая ошибка — слепая вера в красивое решение. Да, регулярное выражение выглядит взросло. Но экзамен — не конкурс каллиграфии кода. Если обычный цикл понятнее и надёжнее, берите цикл. Я сам так поступаю, когда условие становится слишком зубастым для одной строчки.
Короткий чек-лист перед использованием regex:
- не пишите шаблон сразу для большого файла — сначала проверьте на маленькой строке;
- отдельно проверьте, как шаблон ведёт себя на границах фрагмента;
- сравните результат с ручным разбором;
- сохраните рабочий вариант кода, чтобы не переписывать заново.
Не меняйте пять строк в шаблоне одновременно. Исправили одну деталь — запустили. Иначе потом начинается археологическая экспедиция по поиску того, что именно сломалось.
Как тренировать regex: план на неделю без выгорания

** изображение создано или обработано с помощью ИИ.
Регулярные выражения лучше осваивать короткими сериями. Двадцать минут практики с конкретными примерами дают больше,
чем два часа чтения справочной документации. Особенно если рядом чашка чая или хотя бы тишина.
Мини-набор задач для тренировки:
- Поиск блоков, в которых нет одной конкретной буквы.
- Работа с цифровыми последовательностями.
- Поиск повторяющихся пар или групп символов.
Проверка перекрывающихся фрагментов — здесь уже потребуется обычный цикл, потому что стандартный re.findall перекрытия не ловит.
После каждой задачи записывайте шаблон словами. Например: [^D]+ — фрагмент без буквы D длиной от одного символа. Эта привычка быстро приводит в порядок путаницу в голове. А путаница возникает у всех, не переживайте.
Полезный ориентир. Держите рядом актуальную демоверсию и спецификацию ЕГЭ по информатике с сайта ФИПИ. Они в открытом доступе. Смотрите там формат экзамена, а не ищите слово «regex». Регулярные выражения — лишь один из возможных инструментов, а не обязательный пункт программы.
Правило трёх проходов, которое я даю ученикам:
- первый проход: понять условие и записать, что нужно найти;
- второй проход: написать любое рабочее решение (пусть даже длинное);
- третий проход: сократить код, если это безопасно и не вредит читаемости. Красота идёт после надёжности, а не вместо неё.
Перед экзаменом. Сделайте «шпаргалку без шпаргалки»: выпишите десять основных шаблонов на отдельный лист и устно объясните каждый. Через неделю повторите. Если можете объяснить другу — значит, инструмент стал вашим.
И последнее: не бойтесь регулярных выражений. Они выглядят как случайный набор символов, но внутри есть строгая логика. Разберите пару задач, добейтесь первого правильного ответа — и страх заметно уменьшится.
А если шаблон всё равно не слушается, то сделайте паузу и вдохните. Регулярные выражения иногда ставят в тупик даже опытных разработчиков. Главное — не сдавать задачу без проверки. Компьютер любит точность, а мы постепенно учимся говорить с ним понятно.
Хочешь начать готовиться, но остались вопросы?
Заполни форму, и мы подробно объясним, как устроена подготовка к ЕГЭ и ОГЭ в ЕГЭLAND