1

我尝试编写一个函数,该函数只需用任何不是字母或数字的符号来拆分字符串。但是我需要使用西里尔字母,当我这样做时,我会得到带有 '\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', ''] 

谢谢你的帮助。

4

1 回答 1

1

这里有两个问题:

  1. 您在 Syntax 构造函数中强制将 unicode 转换为字符串。通常,您应该将文本值保留为 unicode。(self.string = 字符串,无编码)。

  2. 当您打印 Python 列表时,它会在元素上调用 repr,导致 unicode 被强制转换为这些值。如果你这样做

    for x in a.list:
        print x
    

进行第一次更改后,它将打印 Cyrillic。

编辑:打印列表调用 repr 元素,而不是字符串。然而,打印一个字符串并不能代表它 - print x 和 print repr(x) 产生不同的值。对于字符串,repr 始终是您可以在 Python 中评估以恢复值的东西。

于 2013-08-11T23:55:25.157 回答