1243 подписчика
Вернусь к регулярным выражениям в Python. Статья пока не родилась в голове, но я вспомнил про вопрос, который мне задали в комментариях на моём канале: как быть с регулярным выражением, если в тексте встречаются, например иероглифы или другие многобайтовые символы? Я про вопрос этот забыл, а сейчас вспомнил. А пример такой был в комментарии (я его несколько усовершенствовал)
import re
pt = re.compile(r"\d")
s = "٩٩৩୮٠୮৩abcd19٠٠"
print (pt.findall(s))
Результат при этом будет таким
['٩', '٩', '৩', '୮', '٠', '୮', '৩', '1', '9', '٠', '٠']
т.е. не правильным. Тут решение проблемы должно лежать в подборе флагов в методе compile(). Или re.UNICODE или re.ASCII. В данном случае последний флаг.
import re
pt = re.compile(r"\d", re.ASCII)
s = "٩٩৩୮٠୮৩abcd19٠٠"
print (pt.findall(s))
Результат выполнения
['1', '9']
т.е. то, что мы и ждали.
Кстати флаг re.UNICODE установлен по умолчанию в библиотеке re и, как пишут, устарел, а флаг re.ASCII заставляет делать ASCII-сопоставления.
Ну вот пока всё. Напомню только, что блок моих статей, касающихся регулярных выражений, можно найти здесь или вот здесь.
Ну пока. Программируем в удовольствие.
Около минуты
18 ноября 2023