Ответ 1
Синтаксис вашего юникодного диапазона не будет делать то, что вы ожидаете.
-
Необработанная строка
r''
предотвращает синтаксический анализ экранов\u
, и механизм regex этого не сделает. Единственный диапазон в этом наборе:[0-\]
:>>> re.compile(r'[\u0020-\u00d7ff]', re.DEBUG) in literal 117 literal 48 literal 48 literal 50 range (48, 117) literal 48 literal 48 literal 100 literal 55 literal 102 literal 102
-
Как сделать его литералом Unicode вызывает синтаксический анализ
\u
при оставлении других обратных косых черт (хотя это и не проблема), но ведущие нули являются беспорядочными это вверх. Синтаксис\uxxxx
или\Uxxxxxxxx
, поэтому он анализируется как "\u00d7
,f
,f
".>>> re.compile(ur'[\u0020-\u00d7ff]', re.DEBUG) in range (32, 215) literal 102 literal 102
-
Удаление ведущих нулей или переключение на
\U0000d7ff
исправит его:>>> re.compile(ur'[\u0020-\ud7ff]', re.DEBUG) in range (32, 55295)