我使用分词器将法语句子分成单词,并且包含法语字符â
的单词出现问题。
我试图找出问题并最终归结为这个简单的事实:
>>> re.match(r"’", u'â', re.U)
>>> re.match(r"[’]", u'â', re.U)
<_sre.SRE_Match object at 0x21d41d0>
â
与包含’
的模式相匹配,如果将其放入合奏匹配器中。
我对UTF-8处理有什么不妥,还是个bug?
我的python版本是:
Python 2.7.3 (default, Jan 2 2013, 13:56:14)
[GCC 4.7.2] on linux2
修改:
嗯,令人尴尬的是,似乎用r
替换模式前缀的u
可以解决问题。
我想知道为什么官方文档广泛使用r
然后:((
答案 0 :(得分:7)
你的模式也应该是一个unicode字符串:
>>> re.match(ur"’", u'â', re.U)
>>> re.match(ur"[’]", u'â', re.U)
否则显然sre
将â
编码为latin-1,并在三个字节中查找结果字节,即utf-8 ’
。
"[’]"
相当于"[\xe2\x80\x99]"
,u'â'.encode('latin-1')
是\xe2
。