как Вы используете python 2.6 для удаления всего включая <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)
способ без регулярного выражения
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
Используйте Beautiful soup и сделайте что-то вроде этого чтобы получить все эти элементы, а затем просто замените внутри
tomatosoup = BeautifulSoup(myhtml)
tomatochunks = tomatosoup.findall("div", {"class":"comment"} )
for chunk in tomatochunks:
#remove the stuff
Для записи: обычно обработка XML с помощью регулярных выражений - плохая идея. Тем не менее:
>>> re.sub('>[^<]*', '>', '<div class="comment> .. any… </div>')
'<div class="comment></div>'
Невозможно правильно проанализировать HTML с помощью регулярных выражений. Используйте синтаксический анализатор HTML, например lxml или BeautifulSoup .