08/05/18 00:43:55
>>334
普通は実体参照だけを文字に戻すことはしないからそういう機能はないんじゃないかな。
334さんの用途に合うなら以下のように安直に実装するのが手っ取り早いかと。
.subn() の代わりに .sub() を使うのも可。
# -*- coding: sjis -*-
import re, htmlentitydefs
re_ref = re.compile("&([a-zA-Z0-9]+|#x[a-fA-F0-9]+|#[0-9]+);")
def replace(match):
t = match.group(1)
if t[:2] == "#x":
return chr(int(t[2:], 16))
elif t[0] == "#":
return chr(int(t[1:]))
try:
t = htmlentitydefs.entitydefs[t]
except KeyError:
raise ValueError, "unknown entity: " + match.group()
if t[:2] == "#x":
return chr(int(t[2:], 16))
return t
# 正常終了するテスト
print re_ref.subn(replace, "Onde a terra acaba e o mar começa.")
# 異常終了するテスト
try:
re_ref.subn(replace, "&foo;")
except ValueError, e:
print e