pythonでhtmlの文字参照をなんとかする。

htmlの文字参照ってやつ。めんどいよね。 面倒さのあまりlt、gt、nbsp、あとampあたりだけreplace掛けて良しとしちゃってたりしたんだけどさ。 標準ライブラリのリファレンス見てたら、htmlentitydefsなんて使えそうなものがある。

という訳で使ってみた。 あんま短いコードにならなかった。 がっかり。

import htmlentitydefs    # python3.xならhtml.entities
import re

def unescape(string):
	for x in re.findall('&[a-zA-Z]+?;', string):
		try:
			rep = htmlentitydefs.name2codepoint[x[1:-1]]
		except KeyError:
			pass
		else:
			rep = unichr(rep)    # python3.xなら普通にchr(rep)でおっけー。
			string = string.replace(x, rep)
	return string


print unescape('test string')
print unescape('<tag in <tag>>')
print unescape('dummy&tag;')

もっと短く書く方法あったら教えてくらはい。

あ、そうそう。 nbspの結果がなんか不思議なことになるので注意。 ノーブレークスペースってやつで、普通のスペースとは違うみたいね。詳しくはwikipediaでもどうぞ。 これになっちゃうと困る場合は、個別にreplaceでもしてください。

string = string.replace(' ', ' ')

みたいな感じで済むから、まあそんな労力にはならんでしょ。