Регулярные выражения в задачах 24 ЕГЭ по информатике

Регулярные выражения, или re, помогают искать, разбивать и заменять фрагменты строки по шаблону. В задачах 24 они особенно полезны, когда нужно работать с большими строками: искать цепочки символов, разрезать строку по запрещённым символам или находить фрагменты определённого вида.

Важно понимать: регулярные выражения не заменяют все методы решения. Иногда лучше использовать два указателя, иногда — split, иногда — обычный перебор. Но знание базовых команд re сильно расширяет набор удобных инструментов.

1. Подключение модуля re

import re

После этого можно использовать функции:

  • re.split() — разрезать строку по шаблону;
  • re.findall() — найти все подходящие фрагменты;
  • re.finditer() — найти фрагменты вместе с их позициями;
  • re.sub() — заменить фрагменты по шаблону.

2. Сырые строки r'...'

В регулярных выражениях часто используется символ обратного слэша: \. Поэтому шаблоны обычно записывают как «сырые строки»:

pattern = r'\d+'

Буква r перед строкой означает, что Python не будет отдельно обрабатывать обратные слэши. Для задач 24 лучше сразу привыкнуть писать шаблоны именно так.

3. re.split() — разрезать строку по шаблону

Это одна из самых полезных команд для задач 24. Она хорошо подходит, когда в условии есть запрещённые символы.

import re

s = 'ABC123DEF45GHI'

parts = re.split(r'\d+', s)

print(parts)

Результат:

['ABC', 'DEF', 'GHI']

Здесь шаблон r'\d+' означает «одна или несколько цифр подряд». Мы разрезали строку по группам цифр.

Примеры полезных разбиений:

re.split(r'\d+', s)      # разрезать по цифрам
re.split(r'[A-F]+', s)   # разрезать по буквам от A до F
re.split(r'[K-Z]+', s)   # разрезать по буквам от K до Z

4. re.findall() — найти все подходящие фрагменты

Команда findall находит все непересекающиеся фрагменты строки, которые подходят под шаблон.

import re

s = 'AAABBAAAAABB'

parts = re.findall(r'A+', s)

print(parts)

Результат:

['AAA', 'AAAAA']

Шаблон A+ означает «одна или несколько букв A подряд».

5. re.finditer() — найти фрагменты и их позиции

Иногда нужно знать не только сам найденный фрагмент, но и его позицию в строке. Тогда удобно использовать finditer.

import re

s = 'AB123CD456EF'

for m in re.finditer(r'\d+', s):
    print(m.group(), m.start(), m.end())

Результат:

123 2 5
456 7 10
  • m.group() — найденный фрагмент;
  • m.start() — индекс начала;
  • m.end() — индекс позиции после конца.

6. re.sub() — заменить по шаблону

Команда sub заменяет все фрагменты, подходящие под шаблон.

import re

s = 'ABC123DEF45GHI'

s = re.sub(r'\d+', ' ', s)

print(s)

Результат:

ABC DEF GHI

После такой замены удобно сделать обычный split():

parts = s.split()

Такой приём часто используется так:

s = re.sub(r'[A-F]+', ' ', s)
parts = s.split()

7. Квадратные скобки [...]

Квадратные скобки означают: «один символ из набора».

[ABC]      # A или B или C
[A-F]      # любая буква от A до F
[P-Z]      # любая буква от P до Z
[0-9]      # любая цифра
[A-Z]      # любая заглавная латинская буква
[A-Z0-9]   # заглавная буква или цифра

Примеры:

re.findall(r'[A-F]', s)     # найти все буквы от A до F
re.split(r'[P-Z]+', s)      # разрезать строку по буквам от P до Z

8. Отрицание внутри скобок [^...]

Символ ^ внутри квадратных скобок означает «любой символ, кроме указанных».

[^A]       # любой символ, кроме A
[^0-9]     # любой символ, кроме цифры
[^A-F]     # любой символ, кроме букв от A до F

Пример:

parts = re.findall(r'[^0-9]+', s)

Этот код найдёт все фрагменты, в которых нет цифр.

9. Специальные обозначения

Шаблон Что означает
\d любая цифра, то же самое, что [0-9]
\D любой символ, кроме цифры
. любой один символ, кроме перевода строки

В задачах ЕГЭ лучше часто писать явно: [A-Z], [0-9], [A-F]. Так код понятнее.

10. Квантификаторы: сколько раз повторяется

Шаблон Что означает
+ один или больше раз
* ноль или больше раз
? ноль или один раз
{n} ровно n раз
{n,} n или больше раз
{n,m} от n до m раз

Примеры:

A+          # одна или несколько букв A
\d+         # одна или несколько цифр
[A-F]+      # одна или несколько букв от A до F
A{3}        # ровно три буквы A
\d{5}       # ровно пять цифр
A{2,5}      # от двух до пяти букв A

11. Группы (...) и (?:...)

Круглые скобки позволяют объединять несколько символов в группу. Например:

(AB)+

Это означает: одна или несколько групп AB.

Но в задачах 24 с findall лучше часто использовать незахватывающую группу:

(?:AB)+

Она группирует символы, но не заставляет findall возвращать только содержимое группы.

Пример:

import re

s = 'AB.ABAB.ABABAB'

print(re.findall(r'(?:AB)+', s))

Результат:

['AB', 'ABAB', 'ABABAB']

12. Или: символ |

Вертикальная черта означает «или».

A|B

Это значит: буква A или буква B.

Очень полезный пример — число без ведущих нулей или просто ноль:

number = r'(?:[1-9]\d*|0)'

Этот шаблон означает:

  • либо число начинается с цифры от 1 до 9, а потом идут любые цифры;
  • либо это просто число 0.

13. Практические шаблоны для задач 24

Только буквы A

pattern = r'A+'

Только цифры

pattern = r'\d+'

Только заглавные латинские буквы

pattern = r'[A-Z]+'

Фрагменты без цифр

pattern = r'\D+'

Фрагменты без букв A-F

pattern = r'[^A-F]+'

Повтор пар AB

pattern = r'(?:AB)+'

Повтор пар «согласная + гласная»

pattern = r'(?:[BCDF][AE])+'

Натуральное число без ведущих нулей или 0

number = r'(?:[1-9]\d*|0)'

Арифметическое выражение с операциями - и *

number = r'(?:[1-9]\d*|0)'
pattern = fr'{number}(?:[-*]{number})*'

14. Просмотр вперёд (?=...)

Обычный findall ищет непересекающиеся фрагменты. Если нужно искать фрагменты, начиная с каждой позиции, можно использовать просмотр вперёд:

import re

s = 'ABABA'

parts = re.findall(r'(?=(ABA))', s)

print(parts)

Результат:

['ABA', 'ABA']

Такой способ позволяет находить пересекающиеся фрагменты. Но использовать его нужно аккуратно: на больших строках он может работать заметно медленнее.

15. Как выбирать метод решения

Тип условия Что часто подходит
В строке не должно быть некоторых символов re.split() или re.findall(r'[^...]+', s)
Нужно найти фрагмент по чёткому шаблону re.findall()
Нужно заменить неправильные символы re.sub(), затем split()
Нужно считать «ровно», «не менее», «не более» часто лучше два указателя
Нужно найти минимальное окно часто лучше два указателя

16. Главное правило

Регулярные выражения удобно использовать, когда нужно:

  • разрезать строку по запрещённым символам;
  • найти все фрагменты определённого вида;
  • заменить группы символов по шаблону;
  • коротко описать структуру строки.

Но если в задаче нужно контролировать количество символов внутри окна: ровно 3 буквы, не менее 100 символов, минимальная длина с набором условий, то часто быстрее и надёжнее использовать метод двух указателей.

17. Мини-шпаргалка

import re

re.split(pattern, s)       # разрезать строку по шаблону
re.findall(pattern, s)     # найти все подходящие фрагменты
re.finditer(pattern, s)    # найти фрагменты и их позиции
re.sub(pattern, repl, s)   # заменить по шаблону

\d        # цифра
\D        # не цифра
[A-F]     # буква от A до F
[^A-F]    # любой символ, кроме A-F
+         # один или больше раз
*         # ноль или больше раз
{n}       # ровно n раз
|         # или
(?:...)   # группа без захвата
(?=...)   # просмотр вперёд

Хорошая формула для запоминания:

re — чтобы красиво нарезать строку или найти шаблон.
Два указателя — чтобы эффективно искать окно с нужным количеством символов.

Последнее изменение: пятница, 22 мая 2026, 00:34