Blog

Регулярные выражения. Character class (Класс символов)

Более подробно эта тема рассматривается в курсе Python Fundamentals

Очевидно, что все показанные ранее примеры поиска точного совпадения слов или символов на практике случаются крайне редко (имеются в виду совпадения, показанные в предыдущем разделе Quantification (Квантификация или количественная оценка)).

Значительно чаще требуется более сложный поиск, например поиск текста, удовлетворяющего определённым критериям. Например, поиск телефонных номеров в формате 000-00-00.

Очевидно, что в начале нашего паттерна, соответствующего поиску указанного формата телефонного номера, потребуется указать комбинацию цифр от 0 до 9, повторяющуюся ровно три раза. Ни больше и не меньше.

В том случае, когда на месте указанного символа может быть любой символ из выбранного диапазона, удобнее всего использовать Character class (Класс символов).

Например, если нам нужна любая буква из набора a, b, c или d, то класс символов мы запишем как [abcd]. И поскольку указанные символы расположены в таблице кодировки по соседству, то запись [abcd] можно сократить до вида [a-d].

Если символ - ("дефис") как бы добавляет символы, обозначая "диапазон между границами a и d" ([a-d]), то знак ^ ("карет") наоборот, убирает (исключает) указанные символы из паттерна:

[^0-9] — любой символ, кроме цифры.

Символ в [] Значение
- Диапазон (если не в начале/конце!)
^ Инверсия класса (только в начале!)

Обратите внимание, что "управляющая сила" символов "тире" и "карет" зависит от их места внутри квадратных скобок:

[-ab] или [ab-] — символы -, a, b.
[a^b] — символы a, ^, b.

Но вернёмся к нашему примеру паттерна телефонного номера: класс символов [0-9] - означает, что нам подойдёт любой символ от 0 до 9. И если мы теперь добавим {3}, то это будет означать, что нам нужна группа из трёх чисел подряд: [0-9]{3}.

Далее добавляем дефис и ещё 2 последовательности по два символа. И в результате получаем итоговый паттерн, удовлетворяющий заданному условию:
[0-9]{3}-[0-9]{2}-[0-9]{2}

Кстати, забегая вперёд, следует отметить, что есть один способ записать то же самое:
\d{3}-\d{2}-\d{2}
В этом случае, для записи последовательности чисел используется специальный символ \d (бэкслеш-ди), называемый
Metacharacter (Метасимвол) .

<<< Назад к началу статьи "Регулярные Выражения. Предисловие"