0

我的问题是,即使我使用 utf-8,使用 regex 和 re.search() 的 Python 也无法识别重音符号。这是我的代码串;

#! /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

默认情况下,\w仅匹配 ascii 字符,它转换为[a-zA-Z0-9_]. 并且使用正则表达式匹配 UTF-8 字节已经够难了,更不用说只匹配单词 characters了,你必须匹配字节范围。

您需要从 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 回答