使用Python的Unescape _xHHHH_ XML转义序列

时间:2009-06-23 03:39:48

标签: python xml escaping

我正在使用Python 2.x [不可协商]来读取[由他人创建]的XML文档,这些文档允许许多元素的内容通过使用_xHHHH_转义它们来包含不是有效XML字符的字符惯例,例如ASCII BEL又名U + 0007由7个字符的序列u"_x0007_"表示。允许表示文档中任何旧字符的功能和转义的方式都不可协商。我正在使用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 个答案:

答案 0 :(得分:1)

您也可以检查'_x'而不仅仅是_,这无关紧要,但两个字符的序列甚至比单个下划线更为罕见。除了这些细节之外,你似乎也做了最糟糕的情况!