Python的正则表达式+ + UTF-8不承认口音(Python + Regex + UTF-8

2019-08-17 08:40发布

我的问题是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')

所以问题是,它不承认E而停止。 任何帮助,将不胜感激。 我是一个Python的初学者。

Answer 1:

默认情况下, \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。



文章来源: Python + Regex + UTF-8 doesn't recognize accents