Как я могу использовать регулярное выражение для строки Unicode в Python? - PullRequest
2 голосов
/ 25 февраля 2012

Привет, я хочу использовать регулярное выражение для Unicode UTF-8 в следующей строке:

</td><td>عـــــــــــادي</td><td> 40.00</td>

Я хочу выбрать "عـــــــــــادي", как я могу это сделать?

Мой код для этого:

state = re.findall(r'td>...</td',s)

Спасибо

Ответы [ 2 ]

4 голосов
/ 07 октября 2013

Я столкнулся с чем-то похожим, когда пытался сопоставить строку на русском языке.В вашей ситуации ответ Мишеля работает отлично.Если вы хотите использовать специальные последовательности, такие как \w и \s, вы должны изменить некоторые вещи.Я просто делюсь этим, надеясь, что это будет полезно кому-то еще.

>>> string = u"</td><td>Я люблю мороженое</td><td> 40.00</td>"

Сделайте вашу строку в кодировке Unicode, поставив u перед кавычками

>>> pattern = re.compile(ur'>([\w\s]+)<', re.UNICODE)

Установитеуказывать на юникод, чтобы он также совпадал со строками юникода (см. docs ).

(В качестве альтернативы вы можете использовать свой местный язык для установки диапазона. Для русского языка это будет [а-яА-Я], поэтому:

pattern = re.compile(ur'>([а-яА-Я\s]+)<')

В этом случае вам не нужноустановите флаг больше, так как вы не используете специальную последовательность.)

>>> match = pattern.findall(string)
>>> for i in match:
...     print i
... 
Я люблю мороженое
2 голосов
/ 25 февраля 2012

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

# -*- coding: utf-8 -*-

Кроме того, попробуйте добавить ' ur ' перед строкой, чтобы оно raw и Unicode :

state = re.search(ur'td>([^<]+)</td',s)
res = state.group(1)

Я также отредактировал ваше регулярное выражение, чтобы оно соответствовало. Три точки означают «ровно три символа», но поскольку вы используете UTF-8, который является многобайтовой кодировкой, это может работать не так, как ожидалось.

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