我尝试编写一个函数,只需将字符串拆分为任何不是字母或数字的符号。但我需要使用西里尔语,当我这样做时,我得到的输出列表包含'\ x0d'等元素,而不是拉丁语。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
class Syntax():
def __init__(self, string):
self.string = string.encode('utf-8')
self.list = None
def split(self):
self.list = re.split(ur"\W+", self.string, flags=re.U)
if __name__ == '__main__':
string = ur"Привет, мой друг test words."
a = Syntax(string)
a.split()
print a.string, a.list
控制台输出:
Привет, мой друг test words.
['\xd0', '\xd1', '\xd0', '\xd0\xb2\xd0\xb5\xd1', '\xd0\xbc\xd0\xbe\xd0\xb9', '\xd0', '\xd1', '\xd1', '\xd0\xb3', 'test', 'words', '']
感谢您的帮助。
答案 0 :(得分:1)
这里有两个问题:
您在语法构造函数中强制将unicode转换为字符串。通常,您应将文本值保留为unicode。 (self.string = string,no encoding)。
当您打印Python列表时,它会调用元素上的repr,导致unicode被强制转换为这些值。如果你这样做
for x in a.list:
print x
编辑:打印列表调用元素上的repr,而不是字符串。但是,打印字符串不会重新打印它 - print x和print repr(x)会产生不同的值。对于字符串,repr总是可以在Python中评估以恢复值。