如何在Python中将":"转换为":"?
可能是重复的问题:
在Python中将XML/HTML实体转换为Unicode字符串
在HTML源代码中,有很多像“&# 58;”或“&# 46;”这样的字符(在“&#”和数字之间必须加空格,否则这些字符会被当作“:”或“.”)。我想问的是,如何在Python中将它们转换成它们应该是什么样的?有没有内置的方法或者其他的解决办法?
希望有人能帮我。谢谢!
2 个回答
2
像这样的代码可以处理大部分的实体定义(假设你在用Python 2.x)。它可以处理十进制、十六进制,以及在htmlentitydefs中定义的任何命名实体。
import re
from htmlentitydefs import name2codepoint
EntityPattern = re.compile('&(?:#(\d+)|(?:#x([\da-fA-F]+))|([a-zA-Z]+));')
def decodeEntities(s, encoding='utf-8'):
def unescape(match):
code = match.group(1)
if code:
return unichr(int(code, 10))
else:
code = match.group(2)
if code:
return unichr(int(code, 16))
else:
code = match.group(3)
if code in name2codepoint:
return unichr(name2codepoint[code])
return match.group(0)
if isinstance(s, str):
s = s.decode(encoding)
return EntityPattern.sub(unescape, s)
5
我不太确定有没有现成的库可以用,但这里有个简单粗暴的方法,可以用正则表达式来实现。
>>> import re
>>> re.sub("&#(\d+);",lambda x:unichr(int(x.group(1),10)),": or .")
u': or .'