Python + 正则表达式 + UTF-8 识别不了重音符
我的问题是,Python在使用正则表达式和re.search()的时候,无法识别带重音符号的字母,尽管我已经使用了utf-8编码。以下是我的代码:
#! /usr/bin/python
-*- coding: utf-8 -*-
import re
htmlString = '</dd><dt> Fine, thank you. </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.', ' ', '</dt><dd>', 'Molt', 'b')
所以问题在于,它无法识别字母é,因此就停止了。任何帮助都非常感谢。我是Python初学者。
1 个回答
7
默认情况下,\w
只匹配 ASCII 字符,也就是 [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' ', u'</dt><dd>', u'Molt', u'b\xe9')
不过,处理 HTML 的话,最好还是用 HTML 解析器。比如可以用 BeautifulSoup,它能帮你正确处理编码和 Unicode。