我正在使用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
通过在典型文本中观察频率非常低的“_”以及在可能的情况下避免使用正则表达式设备来提高速度,使上述情况偏差。
问题:那里有更好的想法吗?
答案 0 :(得分:1)
您也可以检查'_x'
而不仅仅是_
,这无关紧要,但两个字符的序列甚至比单个下划线更为罕见。除了这些细节之外,你似乎也做了最糟糕的情况!