从string中删除hex表示 – Python

好的,下面是一个简短的介绍:

目标:检测一个string是否包含hex值,并正确提取它们或删除它们。

问题:我希望能够使用openpyxl将string写入Excel表格,而不会引发非法字符exception错误。

样本有问题的string:

'\xc2\x87,QGLYLGXDO\x03ZLWK\x03EUHDVW\x03FDQFHU\x03\xc2\x9435 

要么:

 '5LVN\x03VWDWXV\x1d\x033RRU\x10ULVN\x1e\x03&\\WRJHQHWLFV\x1d\x03&RPSOH[\x03\x0b\xc2\x95\x03\x16\x03FORQDO\x03FKURPRVRPDO\x03DEQRUPDOLWLHV\x0c\x1e\x030RQRVRPDO\x03 

我已经尝试过:我试图在写入之前检查每个元素,无论是有效的string,通过执行if type(element) == str:isinstance(element) == unicode但无效。

我如何解决这个问题?

额外信息: 我做了什么:

  1. 通过互联网上免费提供的软件将PDF文件转换为xls格式。 [不幸的是,该软件声称将其转换为xls,实际上数据被写入xml ]
  2. 现在,我把这些XML文件,并写一个分析器从中提取数据。
  3. 第三,我使用提取的数据并使用openpyxl软件包将其写入excel表。

如果你看看openpyxl的源代码,你会发现负责检查字符是否被允许的正则expression式,你可以用它来检查string。 看来\x03是这个问题。 您可以从源头上剥离或转义这些字符。

 import re ILLEGAL_CHARACTERS_RE = re.compile(r'[\000-\010]|[\013-\014]|[\016-\037]') m = ILLEGAL_CHARACTERS_RE.search(s) m <_sre.SRE_Match object; span=(12, 13), match='\x03'> 

这对我工作:

 e = "\x00\x03Rock\x04Is\x09 Cool" m = re.split('\s+', re.sub(r"[\x00-\x1F\x7F]", ' ', e)) result = ' '.join(m) print result 

示例输出:

 RockIsCool 

以下排除了\x0b\x0c以外的大部分hex值,因为它们是可打印的字符。

 e = filter(lambda x: x in string.printable, e)