我正在使用Python 2.x [不可谈判] 来读取由他人创建的XML文档,这些文档允许许多元素的内容包含不是有效XML字符的字符,并通过使用
以上内容的偏向是基于在典型文本中观察到非常低的"_"频率,以及尽可能避免正则表达式装置可以实现速度翻倍。
问题:是否有更好的想法?
_xHHHH_
约定对它们进行转义,例如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
以上内容的偏向是基于在典型文本中观察到非常低的"_"频率,以及尽可能避免正则表达式装置可以实现速度翻倍。
问题:是否有更好的想法?
x>=3
(还有人被困在Python 2.2吗...?如果是这样,我非常抱歉...!!!)。至于相对速度,它取决于您获得了多少个孤立的'_'以及使用正则表达式进行了多少减速检查(根据我的经验,测试非常快,但原始帖子说不是这样)--请提供任何特定基准的URL? - Alex Martelli