m09*_*m09 7 python regex unicode python-2.7
我使用一个标记器将法语句子分成单词,并且包含法语字符的单词出现问题â.
我试图找出问题并最终归结为这个简单的事实:
>>> re.match(r"’", u'â', re.U)
>>> re.match(r"[’]", u'â', re.U)
<_sre.SRE_Match object at 0x21d41d0>
Run Code Online (Sandbox Code Playgroud)
â与一个模式相匹配,’ 如果它放在一个整体匹配器中.
关于UTF-8处理我是否有问题或者它是一个错误?
我的python版本是:
Python 2.7.3 (default, Jan 2 2013, 13:56:14)
[GCC 4.7.2] on linux2
Run Code Online (Sandbox Code Playgroud)
编辑:
嗯,令人尴尬的是,似乎r用一个u修复问题来替换模式的前缀.
我不知道为什么官方文档广泛使用r,然后:((
您的模式也应该是一个unicode字符串:
>>> re.match(ur"’", u'â', re.U)
>>> re.match(ur"[’]", u'â', re.U)
Run Code Online (Sandbox Code Playgroud)
否则显然sre编码â为latin-1并在三个字节中找到utf-8的结果字节’.
"[’]"相当于"[\xe2\x80\x99]",u'â'.encode('latin-1')是\xe2.