Поддержка регулярных выражений в 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']