вторник, 4 октября 2011 г.

Python. Удалить html-теги из текста

Если нужно просто подчистить текст от всех тегов (т.е. убрать все, что содержится в угловых скобках), то это можно сделать так:

>>> import re
>>> html = '<b>Hello</b> and <a href="">bye</a>'
>>> p = re.compile(r'<.*?>')
>>> p.sub('', html)
'Hello and bye'
>>>


А если, например, надо удалить все ссылки вместе с текстом, то подойдет следующее решение:


>>> import re
>>> html = '<b>Hello</b> and <a href="">bye</a>'
>>> p = re.compile(r'<a.*?</a>')
>>> p.sub('', html)
'<b>Hello</b> and '
>>>


Удалить только определенный тег:

>>> import re
>>> html = '<b>Hello</b> and <a href="">bye</a>'
>>> p = re.compile(r'<b>|</b>')
>>> p.sub('', html)
'Hello and <a href="">bye</a>'
>>>

3 комментария:

  1. Наверное всё-таки "подчистить текст от тегов" означает убрать теги, а не их содержимое. Т.е. превратить html-документ в обычный текст. Это гораздо более жизненная задача. Особенно если вспомнить, что всё полезное в любом валидном html-документе содержится в тех или иных тегах.

    ОтветитьУдалить
  2. Не все так просто. А если подсунуть обычный html документ, то он сотрет все. Ведь он начинается с <, а заканчивается >

    ОтветитьУдалить
  3. День добрый!
    Есть такой вот скрипт http://habrahabr.ru/post/135822/
    хотелось бы в него добавить возможность удаление тегов <a
    так как мне нужно удалить все теги "а" оставив содержимое между тегов, после если есть тег img я нумерую их и переношу на новую строку
    пока что переработал на поиск <img с пронумеровкой строк а удаление не удается(
    Помогите пожалуйста советом.

    ОтветитьУдалить