Соответствует любой букве юникода? - PullRequest
9 голосов
/ 11 июня 2011

В .net вы можете использовать \p{L} для соответствия любой букве, как я могу сделать то же самое в Python? А именно, я хочу сопоставить любые прописные, строчные и акцентированные буквы.

1 Ответ

22 голосов
/ 11 июня 2011

Модуль Python re пока не поддерживает свойства Unicode. Но вы можете скомпилировать свое регулярное выражение, используя флаг re.UNICODE, и тогда сокращение класса символов \w также будет соответствовать буквам Юникода.

Так как \w также будет соответствовать цифрам, вам необходимо вычесть их из вашего класса персонажей вместе с подчеркиванием:

[^\W\d_]

будет соответствовать любой букве Unicode.

>>> import re
>>> r = re.compile(r'[^\W\d_]', re.U)
>>> r.match('x')
<_sre.SRE_Match object at 0x0000000001DBCF38>
>>> r.match(u'é')
<_sre.SRE_Match object at 0x0000000002253030>
...