Готовые классы: \d, \w, \s и их заглавные версии

Запоминаем короткие обозначения для самых частых наборов символов.

Готовый класс — встроенное сокращение для популярного набора символов, например \d для любой цифры.

Три главных шортката

Писать [0-9] каждый раз неудобно, поэтому для частых наборов есть короткие обозначения:

КлассЗначитЭквивалент
\dлюбая цифра[0-9]
\wбуква, цифра или подчёркивание[a-zA-Z0-9_] (плюс буквы Unicode)
\sпробельный символпробел, таб \t, перенос \n
import re

print(re.findall(r"\d+", "Год 2024, месяц 06"))
print(re.findall(r"\w+", "hello_world 42 ага"))
print(re.findall(r"\S+", "a b\tc"))

Вывод:

['2024', '06']
['hello_world', '42', 'ага']
['a', 'b', 'c']

Обратите внимание: \w в Python по умолчанию включает буквы Unicode, поэтому русское «ага» тоже поймалось. А \S (непробельные) разбил строку по пробелам и табу.

Заглавные версии — отрицание

Заглавная буква инвертирует класс — это «всё, кроме»:

  • \D — любой нецифровой символ (как [^0-9]).
  • \W — любой символ, не являющийся буквой/цифрой/подчёркиванием.
  • \S — любой непробельный символ.
import re

print(re.findall(r"\D+", "abc123def456"))  # куски без цифр
print(re.findall(r"\w+", "один-два, три"))   # слова
print(re.findall(r"\W+", "один-два, три"))   # разделители

Вывод:

['abc', 'def']
['один', 'два', 'три']
['-', ', ']

Практичный приём: схлопнуть пробелы

Класс \s с квантором + легко нормализует пробелы — заменяет любые их скопления на один:

import re

text = "много    пробелов\tи\nтабов"
print(re.sub(r"\s+", " ", text))

Вывод:

много пробелов и табов

Здесь \s+ поймал и группы пробелов, и табуляцию, и перенос строки — всё стало одиночным пробелом.

Готовые классы внутри [...]

Шорткаты можно класть и в свой класс: [\d.] — это «цифра или точка», [\w-] — «буква/цифра или дефис». Это помогает собирать паттерны вроде дат или дробных чисел.

Итог

  • \d — цифра, \w — буква/цифра/подчёркивание, \s — пробельный символ.
  • Заглавные \D \W \S — отрицание соответствующих классов.
  • В Python \w по умолчанию включает Unicode-буквы (кириллицу).
  • re.sub(r"\s+", " ", text) — типовой приём нормализации пробелов.
Проверьте себя
1. Чему эквивалентен класс \d?
A[a-z]
B[0-9] — любая цифра
CЛюбой символ
DТолько число целиком
2. Что matchит \S (заглавная S)?
AЛюбой пробельный символ
BЛюбой непробельный символ
CТолько букву S
DНачало строки
3. Что сделает re.sub(r"\s+", " ", text)?
AУдалит все пробелы
BЗаменит любые группы пробельных символов на один пробел
CДобавит пробелы между словами
DНайдёт все слова
Поддержать проект