我使用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设备,使速度提高了一倍以上,从而使上述结果产生偏差。在
问题是:有更好的主意吗?在
您还可以检查
'_x'
,而不仅仅是_
,这无关紧要,但是两个字符的序列比单个下划线更罕见。除了这些细节之外,你似乎真的在把坏情况处理得最好!在相关问题 更多 >
编程相关推荐