使用Python的Unescape_xhhh_XML转义序列

2024-06-28 14:25:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用python2.x[not negotiable]来读取[其他人创建的]XML文档,这些文档允许许多元素的内容包含无效的XML字符,方法是使用_xHHHH_约定对它们进行转义,例如ASCII BEL aka U+0007由7个字符序列u"_x0007_"表示。无论是允许在文档中表示旧字符的功能还是转义方式都是不可协商的。我正在使用celementree或lxml[semi-negotiable]解析文档。在

以下是我在尽可能高效地解析解析器输出的最佳尝试:

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

通过观察典型文本中极低频率的“u”,以及尽可能避免使用regex设备,使速度提高了一倍以上,从而使上述结果产生偏差。在

问题是:有更好的主意吗?在


Tags: 方法文档re元素内容returnnotxml