Posted By

tamuratetsuya on 01/20/09


Tagged

python


Versions (?)

数値文字参照から文字へ変換


 / Published in: Python
 

  1. #!-*- coding:utf-8 -*-
  2. import htmlentitydefs
  3. import re
  4.  
  5. # 実体参照 & 文字参照を通常の文字に戻す
  6. def htmlentity2unicode(text):
  7. # 正規表現のコンパイル
  8. reference_regex = re.compile(u'&(#x?[0-9a-f]+|[a-z]+);', re.IGNORECASE)
  9. num16_regex = re.compile(u'#x\d+', re.IGNORECASE)
  10. num10_regex = re.compile(u'#\d+', re.IGNORECASE)
  11.  
  12. result = u''
  13. i = 0
  14. while True:
  15. # 実体参照 or 文字参照を見つける
  16. match = reference_regex.search(text, i)
  17. if match is None:
  18. result += text[i:]
  19. break
  20.  
  21. result += text[i:match.start()]
  22. i = match.end()
  23. name = match.group(1)
  24.  
  25. # 実体参照
  26. if name in htmlentitydefs.name2codepoint.keys():
  27. result += unichr(htmlentitydefs.name2codepoint[name])
  28. # 文字参照
  29. elif num16_regex.match(name):
  30. # 16進数
  31. result += unichr(int(u'0'+name[1:], 16))
  32. elif num10_regex.match(name):
  33. # 10進数
  34. result += unichr(int(name[1:]))
  35.  
  36. return result
  37.  
  38. # テストコード
  39. text = u"文字参照 & 実体参照 を通常の文字に戻します。";
  40. print htmlentity2unicode(text)

Report this snippet  

You need to login to post a comment.