我从一个文件中得到一个数据:
words = re.findall(r'[\w]+',self._from.encode('utf8'),re.U)
如果文件包含:
Hi, how are you?
结果将是:
['Hi', 'how', 'are', 'you']
但如果文件包含俄语(即西里尔语符号),则:
Привет, как дела?
在这种情况下,结果是:
['\xd0', '\xd1', '\xd0', '\xd0\xb2\xd0\xb5\xd1', '\xd0\xba\xd0', '\xd0\xba', '\xd0', '\xd0\xb5\xd0', '\xd0']
为什么?世界跆拳道联盟? 我已经添加了:
sys.setdefaultencoding('utf-8')
我正在使用python2.7和linux ubuntu。
words = re.findall(r'[\w]+',self._from.decode('utf8'),re.U)
print u" ".join(words)
要使用
\w+
匹配字母数字unicode字符,您应该将同时传递给unicode
模式和unicode
文本。在Python2中:
假设您正在从文件中读取字节(而不是文本),则应该对字节进行解码以获得
unicode
:ur'(?u)\w+'
是一个raw unicode literal。 即使这里不需要,也可以使用原始的unicode/string文本 正则表达式模式通常是一个好的实践——它允许您避免 在某些字符(如\s
)之前需要双反斜杠。regex模式
ur'(?u)\w+'
bakes-in the Unicode flag告诉re.findall
使\w
依赖于Unicode字符属性数据库。生成包含3个unicode“单词”的列表:
在Python3中:
总的原则是相同的,除了what were ^{}s in
Python2 are now ^{}s in Python3 ,并且不再试图
两者之间的自动转换。所以,再一次假设你是
从文件中读取字节(不是文本),您应该将字节解码为
获取
str
,并使用str
regex模式:收益率
您正在获取一个已经是unicode的字符串并将其编码为unicode 如果省略编码部分,将得到:
我的解决方案:
俄语字母
相关问题 更多 >
编程相关推荐