Поддержка регулярных выражений в Python для акцентов в Unicode NFKD при использовании выражения `\w`

Я пытаюсь использовать модуль регулярных выражений Python 2.7, чтобы соответствовать всем словам в нормализованной строке Юникода NFKD. Я понимаю, что re.UNICODE флаг добавляет поддержку Unicode к \w выражение, но у меня нет никакого успеха с ним.

>>> s = u'ca\u0308t'
>>> print s
cät
>>> pattern = re.compile(ur'\w+', flags=re.UNICODE)
>>> pattern.findall(s)
[u'ca', u't']

Я полагаю, это потому, что \u0308 не считается буквенно-цифровым, и поэтому не совпадает с \w, Шаблон соответствует NFKC нормализованному Unicode:

>>> s
u'ca\u0308t'
>>> import unicodedata 
>>> r = unicodedata.normalize('NFKC', s)
>>> pattern.findall(r)
[u'c\xe4t']

Было бы неплохо, если бы с помощью re.UNICODE заставит парсер рассмотреть \u0061\u0308 эквивалентно \u00E4, Есть что-то, что я делаю не так или не знаю?

Я просто буду использовать NFKC, если ничто в стандартной библиотеке не поможет. Спасибо!

Для получения информации о формах нормализации Unicode: http://unicode.org/reports/tr15/

Изменить: Я только что обнаружил, что этот вопрос был задан ранее: регулярное выражение Python \w не соответствует сочетанию диакритических знаков?

Похоже, лучшим решением является использование regex вместо re

1 ответ

Вы можете использовать это: \S+

\S - все, кроме пробелов

Exemple:

>>> re.compile(ur'\S+', flags=re.UNICODE).findall(u'ca\u0308t')
[u'ca\u0308t']
Другие вопросы по тегам