如何在Python中将":"转换为":"?

3 投票
2 回答
1465 浏览
提问于 2025-04-16 12:04

可能是重复的问题:
在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 .'

撰写回答