【发布时间】:2009-06-23 03:39:47
【问题描述】:
我正在使用 Python 2.x [不可协商] 来读取 [由其他人创建的] XML 文档,这些文档允许许多元素的内容包含无效的 XML 字符,方法是使用 _xHHHH_ 约定转义它们,例如ASCII BEL aka U+0007 由 7 字符序列 u"_x0007_" 表示。无论是允许在文档中表示任何旧字符的功能还是转义方式都是不可协商的。我正在使用 cElementTree 或 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
通过观察典型文本中“_”的频率非常低,以及通过尽可能避免使用正则表达式设备,速度提高了一倍以上,因此上述情况有所偏差。
问题:有什么更好的想法吗?
【问题讨论】: