Регулярное выражение для удаления тегов HTML из строки в Python - PullRequest
3 голосов
/ 29 августа 2011

Я получаю свой результат из RSS-канала, используя следующий код:

try:
    desc = item.xpath('description')[0].text
    if date is not None:
        desc =date +"\n"+"\n"+desc
except:
    desc = None

Но иногда описание содержит html-теги внутри RSS-канала, как показано ниже:

Это samletext

При отображении содержимого я не хочу, чтобы на странице отображались какие-либо теги HTML.регулярное выражение для удаления тегов HTML.

Ответы [ 3 ]

1 голос
/ 29 августа 2011

Быстрый и грязный путь:

def remove_html_tags(text):
    pattern = re.compile(r'<.*?>')
    return pattern.sub('', text)

Но для более надежного решения я бы рекомендовал изучить Beautiful Soup .

1 голос
/ 22 января 2013

Есть простой способ без использования регулярных выражений. Это надежное решение:

def remove_html_markup(s):
    tag = False
    quote = False
    out = ""

    for c in s:
            if c == '<' and not quote:
                tag = True
            elif c == '>' and not quote:
                tag = False
            elif (c == '"' or c == "'") and tag:
                quote = not quote
            elif not tag:
                out = out + c

    return out

Идея объясняется здесь: http://youtu.be/2tu9LTDujbw

Вы можете увидеть это здесь: http://youtu.be/HPkNPcYed9M?t=35s

PS - Если вы заинтересованы в классе (об умной отладке с python), я дам вам ссылку: http://www.udacity.com/overview/Course/cs259/CourseRev/1. Это бесплатно!

Добро пожаловать! :)

1 голос
/ 29 августа 2011

Попробуйте:

pattern = re.compile(u'<\/?\w+\s*[^>]*?\/?>', re.DOTALL | re.MULTILINE | re.IGNORECASE | re.UNICODE)
text = pattern.sub(u" ", text)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...