UTF в Python Regex - PullRequest
       23

UTF в Python Regex

7 голосов
/ 16 декабря 2008

Я знаю, что Python 3 исправляет множество проблем с UTF, однако я не могу использовать Python 3, я использую 2.5.1

Я пытаюсь пересмотреть документ, но в нем есть дефисы UTF, а не ... Python не может сравниться с ними, и если я добавлю их в регулярное выражение, он выдаст колебание.

Как заставить Python использовать строку UTF или каким-либо образом сопоставить такой символ?

Спасибо за вашу помощь

Ответы [ 3 ]

7 голосов
/ 16 декабря 2008

Вы должны экранировать рассматриваемый символ (-) и поместить символ u перед строковым литералом, чтобы сделать его строкой Юникода.

Так, например, это:

re.compile("–") 

становится таким:

re.compile(u"\u2013")
4 голосов
/ 16 декабря 2008

После быстрого тестирования и посещения PEP 0264: определение кодировок исходного кода Python , я вижу, что вам может потребоваться сообщить Python весь файл в кодировке UTF-8, добавив добавление комментария, подобного этому, к первая строка.

# encoding: utf-8

Вот тестовый файл, который я создал и запустил на Python 2.5.1 / OS X 10.5.6

# encoding: utf-8
import re
x = re.compile("–") 
print x.search("xxx–x").start()
3 голосов
/ 16 декабря 2008

Не используйте UTF-8 в регулярном выражении. UTF-8 - это многобайтовое кодирование, где некоторые кодовые точки Unicode кодируются 2 или более байтами. Вы можете сопоставить части вашей строки, которые вы не планировали сопоставлять. Вместо этого используйте строки в кодировке Юникод, как было предложено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...