Соответствие чувствительных к регистру строк Юникода с регулярными выражениями в Python - PullRequest
6 голосов
/ 13 сентября 2011

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

re.compile(r"[a-z][A-Z]")

Теперь я хочу сделать то же самое для строк в юникоде, то есть сопоставить что-то вроде «aÅ» или «yÜ».

Пробовал

re.compile(r"[a-z][A-Z]", re.UNICODE)

но это не работает.

Есть какие-нибудь подсказки?

1 Ответ

7 голосов
/ 13 сентября 2011

Это сложно сделать с регулярным выражением Python, потому что текущая реализация не поддерживает ярлыки свойств Unicode, такие как \p{Lu} и \p{Ll}.

[A-Za-z], конечно, будет соответствовать только буквам ASCII, независимо от того, установлена ​​опция Unicode или нет.

Таким образом, пока модуль re не будет обновлен (или вы не установите пакет regex , находящийся в настоящее время в разработке), вам нужно либо сделать это программно (выполнить итерацию по строке и выполнить char.islower() / char.isupper() на символах), либо укажите все кодовые точки Юникода вручную, что, вероятно, не стоит усилий ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...