2009-06-23 43 views
4

我正在使用Python 2.x [not negotiable]來讀取其他人創建的XML文檔,它允許許多元素的內容通過轉義來包含無效的XML字符使用例如_xHHHH_慣例ASCII BEL aka U + 0007由7個字符的序列u"_x0007_"表示。不允許在文檔中表示任何舊字符的功能或轉義方式都是可以協商的。我正在使用cElementTree或lxml解析文檔[semi-negotiable]。Unescape _xHHHH_使用Python的XML轉義序列

這裏以儘可能有效unescapeing解析器輸出儘可能我最好的嘗試:

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

你不妨檢查'_x'而不是隻是_,那不會有太大影響,但肯定是兩個字符的序列比單個下劃線更稀有。除了這些細節外,你似乎正在做出最糟糕的情況!

+0

檢查'_x'的速度稍慢(Python 2.6),並且在2.3之前的Pythons上不起作用。 – 2009-06-23 04:21:51