我正在尝试将Unicode字符串(简化版)拆分成单词,就像这样:
print re.findall(r'(?u)\w+', "раз два три")
我希望看到的是:
['раз','два','три']
但我实际得到的是:
['\xd1', '\xd0', '\xd0', '\xd0', '\xd0\xb2\xd0', '\xd1', '\xd1', '\xd0']
我做错了什么?
编辑:
如果在字符串前面使用u
:
print re.findall(r'(?u)\w+', u"раз два три")
I get:
[u'\u0440\u0430\u0437', u'\u0434\u0432\u0430', u'\u0442\u0440\u0438']
编辑 2:
看起来我应该先阅读文档:
print re.findall(r'(?u)\w+', u"раз два три")[0].encode('utf-8')
会给我:
раз
只是为了确保,那么这听起来像是一个适当的方法吗?
\w+
字符串和在\s+
上分割之间有所不同。显然,你希望在这两种情况下都启用(?u)
。在打印之前不要进行手动编码。打印到字符流中,它将具有编码,而不是字节流,它没有。在Python中使用Matthew Barnett的正则表达式库进行Unicode正则表达式。不要使用re
:它不能正常工作。 - tchrist