питон удалить все между - PullRequest
9 голосов
/ 16 апреля 2010

как вы используете python 2.6 для удаления всего, включая <div class="comment"> ....remove all ....</div>

я пробовал разные способы, используя re.sub безуспешно

Спасибо

Ответы [ 6 ]

16 голосов
/ 16 апреля 2010

Это можно легко и надежно сделать с помощью 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 с использованием регулярных выражений является плохой идеей .

3 голосов
/ 16 апреля 2010

С lxml.html :

from lxml import html
doc = html.fromstring(input)
for el in doc.cssselect('div.comment'):
    el.drop_tree()
result = html.tostring(doc)
2 голосов
/ 16 апреля 2010

Вы не можете правильно анализировать HTML с помощью регулярных выражений. Используйте анализатор HTML, например lxml или BeautifulSoup .

0 голосов
/ 16 апреля 2010

Используйте Красивый суп и сделайте что-то подобное, чтобы получить все эти элементы, а затем просто замените их внутри

tomatosoup = BeautifulSoup(myhtml)

tomatochunks = tomatosoup.findall("div", {"class":"comment"} )

for chunk in tomatochunks:
   #remove the stuff
0 голосов
/ 16 апреля 2010

без регулярных выражений

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
0 голосов
/ 16 апреля 2010

Для записи, как правило, плохая идея обрабатывать XML с помощью регулярных выражений. Тем не менее:

>>> re.sub('>[^<]*', '>', '<div class="comment> .. any… </div>')
'<div class="comment></div>'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...