2012-07-31 2 views
2

Regex \w, похоже, игнорирует мои строки Unicode. я создал следующую функцию:
extras.pyDjango regex unicode игнорирует w tag

# -*- coding: utf-8 -*- 
def test(word): 
    print re.sub(r'[^\w]+', '', word, re.U) 

и из DJANGO оболочки:

import extras 
extras.test(u'שלום') 

Выходной сигнал является пустая строка, в то время как она должна быть такой же, как на входе , в этом примере.
Цель регулярного выражения состоит в том, чтобы сохранить только буквенно-цифровые символы, но он не работает. Он работает с ASCII.

В чем может быть проблема?

ответ

3

Используйте необработанные строки Юникода для шаблона, и убедитесь, что использовать flags параметр:

# -*- coding: utf-8 -*- 
def test(word): 
    print re.sub(ur'[^\w]+', u'', word, flags=re.U) 

затем:

In [9]: test(u'Ã') 
à 
+0

Я не могу поверить, что это недостающее 'флагов =' , Спасибо за ответ! – user1102018

+1

только осторожно, что 'flags' в' .sub() 'был добавлен только в python 2.7! – Stefano