Как убрать апострофы и прочее в Python? - PullRequest
8 голосов
/ 03 мая 2009

У меня есть строка с такими символами:

'

Это, очевидно, апостроф.

Я безуспешно пробовал saxutils.unescape () и пробовал urllib.unquote ()

Как мне это расшифровать? Спасибо!

Ответы [ 3 ]

2 голосов
/ 03 мая 2009

Попробуйте: (нашел здесь )

from htmlentitydefs import name2codepoint as n2cp
import re

def decode_htmlentities(string):
    """
    Decode HTML entities–hex, decimal, or named–in a string
    @see http://snippets.dzone.com/posts/show/4569

    >>> u = u'E tu vivrai nel terrore - L'aldilà (1981)'
    >>> print decode_htmlentities(u).encode('UTF-8')
    E tu vivrai nel terrore - L'aldilà (1981)
    >>> print decode_htmlentities("l'eau")
    l'eau
    >>> print decode_htmlentities("foo < bar")                
    foo < bar
    """
    def substitute_entity(match):
        ent = match.group(3)
        if match.group(1) == "#":
            # decoding by number
            if match.group(2) == '':
                # number is in decimal
                return unichr(int(ent))
            elif match.group(2) == 'x':
                # number is in hex
                return unichr(int('0x'+ent, 16))
        else:
            # they were using a name
            cp = n2cp.get(ent)
            if cp: return unichr(cp)
            else: return match.group()

    entity_re = re.compile(r'&(#?)(x?)(\w+);')
    return entity_re.subn(substitute_entity, string)[0]
2 голосов
/ 03 мая 2009

Проверьте этот вопрос . То, что вы ищете, это "декодирование HTML-сущности". Как правило, вы найдете функцию с именем что-то вроде «htmldecode», которая будет делать то, что вы хотите. Django и Cheetah предоставляют такие функции, как BeautifulSoup.

Другой ответ будет отлично работать, если вы не хотите использовать библиотеку, и все объекты являются числовыми.

1 голос
/ 03 мая 2009

Наиболее надежным решением, похоже, является эта функция от Python luminary Фредерика Лунда. Это не самое короткое решение, но оно обрабатывает именованные объекты, а также шестнадцатеричные и десятичные коды.

...