Python + 正则表达式 + UTF-8 识别不了重音符

0 投票
1 回答
6454 浏览
提问于 2025-04-17 18:07

我的问题是,Python在使用正则表达式和re.search()的时候,无法识别带重音符号的字母,尽管我已经使用了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初学者。

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'&#160;', u'</dt><dd>', u'Molt', u'b\xe9')

不过,处理 HTML 的话,最好还是用 HTML 解析器。比如可以用 BeautifulSoup,它能帮你正确处理编码和 Unicode。

撰写回答