BlankTar

about | blog | works | photo

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&amp;tag;')

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

あ、そうそう。
nbspの結果がなんか不思議なことになるので注意。
ノーブレークスペースってやつで、普通のスペースとは違うみたいね。詳しくはwikipediaでもどうぞ。
これになっちゃうと困る場合は、個別にreplaceでもしてください。
string = string.replace('&nbsp;', ' ')みたいな感じで済むから、まあそんな労力にはならんでしょ。
< pythonの三項演算子 pythonのモジュールをC言語から使う >