使用Python UNESCAPE _xHHHH_的形式XML转义序列(Unescape _xHHH

2019-09-16 17:12发布

我使用Python 2.x的[没得商量]读取XML文档[他人创建],使许多元素的内容包含不使用转义他们有效的XML字符的字符_xHHHH_约定如ASCII BEL又名U + 0007是由7个字符的序列所表示的u"_x0007_" 。 既不,允许任何旧的字符在文档中,也没有逃逸的方式表示的功能是协商的。 我解析使用cElementTree或LXML [半转让]的文件。

这是在尽可能有效地unescapeing解析器输出我的最好的尝试:

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

以上是通过在典型的文本观测的“_”非常低的频率和偏压通过避免正则表达式装置尽可能一个好于加倍速度的。

问题:任何更好的想法了吗?

Answer 1:

你不妨检查'_x' ,而不仅仅是_ ,这并不重要很多,但肯定是两个字符的序列比单下划线更为罕见。 除了这些细节,你似乎做的最好的一个糟糕的情况!



文章来源: Unescape _xHHHH_ XML escape sequences using Python