0

私の問題は、正規表現とre.search()を使用しているPythonが、utf-8を使用していてもアクセントを認識しないことです。これが私のコード文字列です。

#! /usr/bin/python
-*- coding: utf-8 -*-
import re

htmlString = '</dd><dt> Fine, thank you.&#160;</dt><dd> Molt bé, gràcies.'

SearchStr = '(\<\/dd\>\<dt\>)+ ([\w+\,\.\s]+)([\&\#\d\;]+)(\<\/dt\>\<dd\>)+ (\w+) (\w+)'

Result = re.search(SearchStr, htmlString)

if Result:
print Result.groups()

passavol23:jO$ catalanword.py
('</dd><dt>', 'Fine, thank you.', '&#160;', '</dt><dd>', 'Molt', 'b')

したがって、問題は、éを認識せずに停止することです。どんな助けでもいただければ幸いです。Pythonの初心者です。

4

1 に答える 1

7

デフォルトでは、\wASCII文字にのみ一致し、に変換され[a-zA-Z0-9_]ます。また、正規表現を使用してUTF-8バイトを照合することは十分に困難であり、単語文字のみを照合することは言うまでもなく、代わりにバイト範囲を照合する必要があります。

UTF-8からにデコードし、代わりにフラグunicodeを使用する必要があります。re.UNICODE

>>> re.search(SearchStr, htmlString.decode('utf8'), re.UNICODE).groups()
(u'</dd><dt>', u'Fine, thank you.', u'&#160;', u'</dt><dd>', u'Molt', u'b\xe9')

ただし、実際にはHTMLパーサーを使用してHTMLを処理する必要があります。たとえば、BeautifulSoupを使用します。エンコーディングとUnicodeを正しく処理します。

于 2013-03-06T11:27:15.103 に答える