Почему регулярное выражение [a-zA-Z] не находит Б?

419 просмотра
0
0 Комментариев

from re import compile, UNICODE
 
text = input('Enter only letters: ')
 
result = bool(compile(r'[a-zA-Z]', flags=UNICODE).search(text))
print(result)

Почему не работает с юникодом, например я ввожу Б получаю False.


Добавить комментарий

2 Answers

Python Опубликовано 16.12.2018
0

В диапазон [a-zA-Z] не входит, Вы можете явно указать, что нужно сопоставлять с кириллицей r'[a-zA-Zа-яА-Я]’ или так r’\w’ во втором случае помимо букв в сопоставление будут включены символы 0123456789_ . Флаг UNICODE в Python3 ставится по дефолту, так что его прописывать не обязательно.

bool(compile(r'[a-zA-Zа-яА-ЯёЁ]').search(text)) #1 вариант. За ёЁ спасибо jfs и gil9red
bool(compile(r'\w').search(text)) #2 вариант

Добавить комментарий
0

что означает [a-zA-Z]? То что в этот диапазон входят все символы от a до z и от A до Z. Буква Б сюда не входит. Для включения так же русских символов необходимо сделать маску [a-zA-Zа-яА-ЯёЁ].

Дело в том что каждому символу соответствует свой номер, диапазон a-z означает что все символы номер которых от номера a до номера z, эти символы имеют последовательную нумерацию. Отдельно указывается A-Z так как там нумерация уже идёт в другом блоке, отдельно от a-z, аналогично и для а-я, А-Я, ёЁ.
Тире соответствует диапазону от a до z.

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up