Классы символов: [...], диапазоны и отрицание
Описываем «любой символ из набора» с помощью квадратных скобок.
Класс символов
[...]совпадает с одним символом из перечисленных внутри скобок.
Перечисление символов
Квадратные скобки задают набор: совпадёт любой один символ из перечисленных. Паттерн gr[ae]y читается как «g, r, потом a или e, потом y» — то есть оба написания слова «серый» по-английски:
import re
print(re.findall(r"gr[ae]y", "gray grey groy"))
Вывод:
['gray', 'grey']
Внутри скобок [ae] — это «a или e», но ровно один символ. groy не подошёл: o нет в наборе.
Диапазоны
Перечислять все буквы утомительно, поэтому внутри скобок задают диапазоны через дефис: [a-z] — все строчные латинские буквы, [A-Z] — заглавные, [0-9] — цифры. Диапазоны можно комбинировать:
import re
text = "Go2Py_3 ага"
print(re.findall(r"[a-zA-Z]", text)) # любые латинские буквы
print(re.findall(r"[0-9]", text)) # любые цифры
print(re.findall(r"[a-zA-Z0-9]+", text)) # буквы и цифры подряд
Вывод:
['G', 'o', 'P', 'y'] ['2', '3'] ['Go2Py', '3']
Подчёркивание и пробел в класс [a-zA-Z0-9] не вошли, поэтому Go2Py и 3 разбились на части.
Отрицание [^...]
Если первый символ внутри скобок — ^, класс инвертируется: совпадёт любой символ, кроме перечисленных. [^0-9] — это «любой нецифровой символ»:
import re
print(re.findall(r"[^0-9]", "a1b2c3"))
Вывод:
['a', 'b', 'c']
Удобный приём — очистить строку, оставив только нужные символы. Уберём из текста всё, кроме русских букв и пробелов:
import re
text = "Привет, мир123! Как дела?"
print(re.sub(r"[^а-яёА-ЯЁ ]", "", text))
Вывод:
Привет мир Как дела
Класс [^а-яёА-ЯЁ ] поймал цифры и знаки препинания, а re.sub заменил их на пустую строку.
Особенности внутри скобок
Внутри [...] большинство метасимволов теряют силу и означают себя: точка . внутри класса — это просто точка, её не надо экранировать. Дефис ставьте первым или последним ([-+]), чтобы он не воспринимался как диапазон. А ^ особый только в самом начале.
Итог
[abc]— один символ из набора;[a-z],[0-9]— диапазоны.[^...]— любой символ, КРОМЕ перечисленных.- Внутри скобок метасимволы (например точка) обычно означают сами себя.
- Связка
re.sub+ отрицающий класс — простой способ почистить строку.