使用Python解码_xHHHH_ XML转义序列
我正在使用Python 2.x(这个不可以改变)来读取一些XML文档(这些文档是别人创建的),这些文档的很多元素内容中包含一些不符合XML标准的字符。为了处理这些字符,它们使用了一种特殊的方式来转义,叫做<_xHHHH_>的格式,比如ASCII的BEL字符(也就是U+0007)会被表示成7个字符的序列。在这个文档中,既不能改变如何表示这些字符,也不能改变转义的方式。我是用cElementTree或lxml来解析这些文档(这个可以稍微调整一下)。
这是我尽量高效地处理解析结果的尝试:
import re
def unescape(s,
subber=re.compile(r'_x[0-9A-Fa-f]{4,4}_').sub,
repl=lambda mobj: unichr(int(mobj.group(0)[2:6], 16)),
):
if "_" in s:
return subber(repl, s)
return s
上面的代码是基于我观察到在普通文本中“_”这个字符出现频率很低,并且通过尽量避免使用正则表达式来提高速度,速度提升了超过一倍。
我的问题是:有没有更好的方法呢?
1 个回答
1
你可以检查一下 '_x'
,而不仅仅是 _
,这样做也没什么大不了的,不过 '_x'
这个组合出现的机会比单个下划线要少得多。除了这些细节,你似乎在糟糕的情况下也尽量做得很好!