我有这个帮助函数,可以删除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类别。
答案 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))