逗号和引号的Unicode类别

时间:2015-11-06 11:14:14

标签: python unicode python-unicode

我有这个帮助函数,可以删除XML文本中的控制字符:

def remove_control_characters(s): #Remove control characters in XML text
    t = ""
    for ch in s:
        if unicodedata.category(ch)[0] == "C":
            t += " "
        if ch == "," or ch == "\"":
            t += ""
        else:
            t += ch
    return "".join(ch for ch in t if unicodedata.category(ch)[0]!="C")

我想知道是否有用于排除引号和逗号的unicode类别。

2 个答案:

答案 0 :(得分:1)

在Unicode中,控制字符的一般类别是'Cc',即使它们没有名称。unicodedata.category()返回常规类别,因为您可以在python控制台中自行测试:

>>>unicodedata.category(unicode('\00')) 'Cc'

对于逗号和引号,类别为Pi和Pf。 您只测试示例中返回代码的第一个字符,因此请尝试:

 cat = unicodedata.category(ch)
 if cat == "Cc" or cat == "Pi" or cat == "Pf":

答案 1 :(得分:1)

基于此处的最后一个Unicode数据文件UnicodeData.txt

逗号和引号标记位于标点符号其他类别Po:

002C;COMMA;Po;0;CS;;;;;N;;;;;
0022;QUOTATION MARK;Po;0;ON;;;;;N;;;;;

因此,根据您的问题,您的代码应该是这样的:

o = [c if unicodedata.category(c) != 'Cc' else ' '\
    for c in xml if unicodedata.category(c) != 'Po']

return("".join(o))

如果要查找任何其他unicode符号的类别,并且不想处理UnicodeData.txt文件,则只需将其打印出来即可 print(c, unicodedata.category(c))