使用Python解码_xHHHH_ XML转义序列

3 投票
1 回答
1686 浏览
提问于 2025-04-15 12:26

我正在使用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' 这个组合出现的机会比单个下划线要少得多。除了这些细节,你似乎在糟糕的情况下也尽量做得很好!

撰写回答