Сообщить об ошибке.

Символьные классы и сокращенные определения классов

В шаблонах регулярных выражений большинство букв и символов будут просто соответствовать друг другу. Например test будет точно соответствовать строке test. Можно включить режим без учета регистра, который позволил бы этому регулярному выражению совпадать Test или TEST.

Есть исключения из этого правила, некоторые символы являются специальными метасимволами и не соответствуют друг другу. Вместо этого они сигнализируют, что какие-то строки должны быть сопоставлены с чем-то или они влияют на другие части регулярного выражения, повторяя их или изменяя их значение.

Вот полный список метасимволов: '.', '^', '$', '*', '+', '?', '{', '}', '[', ']', '\', '|', '(', ')', их значения обсудим позже.

Первые метасимволы, на которые стоит обратить внимание, это '[' и ']'. Они используются для указания символьного класса, который представляет собой набор символов, которым нужно соответствовать. Символы могут быть перечислены по отдельности, или может быть указан диапазон символов, например [a-z]. Например [abc] будет соответствовать любому из символов a, b или c. Это то же самое, что и выражение [a-c], которое использует диапазон для выражения того же набора символов. Если шаблону поиска необходимо соответствие только строчным буквам, то регулярное выражение будет [a-z].

Метасимволы не активны внутри символьных классов регулярного выражения за некоторым исключением. Например, [akm$] будет соответствовать любому из символов 'a', 'k', 'm' или '$', обычно '$' это метасимвол, но внутри символьных классов он лишен своей особой природы.

Можно сопоставить символы, не перечисленные в символьном классе [] - квадратные скобки. Это достигается включением '^' в качестве первого символа символьного класса. Например, [^5] будет соответствовать любой символ, кроме '5'. Если этот символ будет стоять внутри символьного класса (не первым), то он будет обозначать сам себя, а вне символьного класса '^' будет соответствовать позиции в начале строки.

Возможно, самый важный метасимвол - это обратный обратный слеш '\'. Как в строковых литералах Python, за обратной косой чертой могут следовать различные символы для обозначения специальных последовательностей. Он также используется для экранирования всех метасимволов, чтобы вы могли сопоставлять их по шаблонам. Например, если вам нужно сопоставить '[' или '\', вы можете поставить перед ними обратную косую черту, чтобы убрать их особое значение: '\['или '\\'.

Некоторые из специальных последовательностей, начинающихся с '\' представляют предопределенные наборы символов, которые часто полезны, такие как набор цифр, набор букв или набор всего, что не является пробелом. Такие последовательности еще называют "сокращенные определения символьных классов".

Рассмотрим пример: специальная последовательность \w соответствует любому буквенно-цифровому символу. Если шаблон регулярного выражения выражен в байтах, то это эквивалентно символьному классу [a-zA-Z0-9_]. Если шаблон регулярного выражения является строкой, то \w будет соответствовать всем символам, отмеченным как буквы в базе данных Unicode, предоставленной модулем unicodedata. Можно использовать более ограниченное определение специальной последовательности \w в строковом шаблоне поиска, указав флаг re.ASCII при компиляции регулярного выражения.

Следующий список сокращенных определений символьных классов не является полным. Полный список специальных последовательностей и сокращенных определений символьных классов для строковых шаблонов Unicode смотрите в разделе "Синтаксис регулярных выражений". Как правило, версии Unicode соответствуют любому символу, который находится в соответствующей категории в базе данных Unicode.

Список сокращенных определений символьных классов:

  • '\d' - Соответствует любой десятичной цифре; эквивалентно символьному классу [0-9].
  • '\D' - Соответствует любому нецифровому символу; это эквивалентно символьному классу [^0-9].
  • '\s' - Соответствует любому пробельному символу; эквивалентно символьному классу [ \t\n\r\f\v].
  • '\S' - Соответствует любому непробельному символу; эквивалентно символьному классу [^ \t\n\r\f\v].
  • '\w' - Соответствует любому буквенно-цифровому символу; эквивалентно символьному классу [a-zA-Z0-9_].
  • '\W' - Соответствует любому не алфавитно-цифровому символу; эквивалентно символьному классу [^a-zA-Z0-9_].

Эти специальные последовательности могут быть включены в класс символов регулярных выражений. Например, [\s,.] - это символьный класс, который будет соответствовать любому символу пробела, или ', ' или '.'.

Последний метасимвол в этом разделе, это точка '.'. Метасимвол точка '.' соответствует чему угодно, кроме символа новой строки '\n'. Есть альтернативный режим re.DOTALL, в котором он будет соответствовать даже новой строке. Метасимвол точка '.' часто используется там, где необходимо сопоставить "любой символ".