Найти тему
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-сопоставления.

Ну вот пока всё. Напомню только, что блок моих статей, касающихся регулярных выражений, можно найти здесь или вот здесь.

Ну пока. Программируем в удовольствие.
Вернусь к регулярным выражениям в Python.
Около минуты