как вы используете python 2.6 для удаления всего, включая <div class="comment"> ....remove all ....</div>
<div class="comment"> ....remove all ....</div>
я пробовал разные способы, используя re.sub безуспешно
Спасибо
Это можно легко и надежно сделать с помощью HTML-парсера, например BeautifulSoup :
>>> from BeautifulSoup import BeautifulSoup >>> soup = BeautifulSoup('<body><div>1</div><div class="comment"><strong>2</strong></div></body>') >>> for div in soup.findAll('div', 'comment'): ... div.extract() ... <div class="comment"><strong>2</strong></div> >>> soup <body><div>1</div></body>
См. Этот вопрос для примеров по , почему синтаксический анализ HTML с использованием регулярных выражений является плохой идеей .
С lxml.html :
from lxml import html doc = html.fromstring(input) for el in doc.cssselect('div.comment'): el.drop_tree() result = html.tostring(doc)
Вы не можете правильно анализировать HTML с помощью регулярных выражений. Используйте анализатор HTML, например lxml или BeautifulSoup .
Используйте Красивый суп и сделайте что-то подобное, чтобы получить все эти элементы, а затем просто замените их внутри
tomatosoup = BeautifulSoup(myhtml) tomatochunks = tomatosoup.findall("div", {"class":"comment"} ) for chunk in tomatochunks: #remove the stuff
без регулярных выражений
pat='<div class="comment">' for chunks in htmlstring.split("</div>"): m=chunks.find(pat) if m!=-1: chunks=chunks[:m] print chunks
выход
$ cat file one two <tag> ....</tag> adsfh asdf <div class="comment"> ....remove all ....</div>s sdfds <div class="blah" ....... ..... blah </div> $ ./python.py one two <tag> ....</tag> adsfh asdf s sdfds <div class="blah" ....... ..... blah
Для записи, как правило, плохая идея обрабатывать XML с помощью регулярных выражений. Тем не менее:
>>> re.sub('>[^<]*', '>', '<div class="comment> .. any… </div>') '<div class="comment></div>'