2015-11-06 61 views
-1

我有获取XML文本摆脱控制字符这个辅助功能:的Unicode类别逗号和引号

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

这个问题是不完整的打印出来。一般来说,您可以在JSON数据中使用问号和逗号。我定期将XML文档作为JSON数据结构的一部分传递。所以在这里你应该向你的函数显示输入,并且显示你如何使用输出来获得无效的JSON。 – Louis

+3

添加一个有问题的xml样本和期望的输出 –

+0

该函数接受一个字符串,并且输出结果是我期望的结果。但是我想知道的是,是否有逗号和引号的unicode类别。 –

回答

1

在Unicode中,控制字符通用类别为'Cc',即使它们没有名称。 unicodedata.category()返回普通类,你可以在Python控制台测试自己:

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

对于逗号和引号,类别是皮和PF。 你只测试在您的例子中,返回代码的第一个字符,所以会转而:

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

这只有在我使用'cat ==“P”'时才有效。它看起来像Python不承认第二个子类别字母。 –

+0

逗号在标点符号其他类别:Po '002C; COMMA; Po; 0; CS ;;;; N ;;;;;' – Dmitry

1

基于最后Unicode数据文件在这里UnicodeData.txt

逗号和引号是标点符号其他类别宝:

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))

相关问题