python删除之间的一切

时间:2010-04-15 23:50:42

标签: python class html

如何使用python 2.6删除包括<div class="comment"> ....remove all ....</div>

在内的所有内容

我尝试使用re.sub以各种方式没有任何成功

谢谢

6 个答案:

答案 0 :(得分:17)

这可以使用像BeautifulSoup这样的HTML解析器轻松可靠地完成:

>>> 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>

有关why parsing HTML using regular expressions is a bad idea的示例,请参阅此问题。

答案 1 :(得分:3)

使用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 :(得分:2)

您无法使用正则表达式正确解析HTML。使用HTML解析器,例如lxmlBeautifulSoup

答案 3 :(得分:0)

对于记录,使用正则表达式处理XML通常是个坏主意。尽管如此:

>>> re.sub('>[^<]*', '>', '<div class="comment> .. any… </div>')
'<div class="comment></div>'

答案 4 :(得分:0)

非正则表达方式

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

答案 5 :(得分:0)

使用美丽的汤并做这样的事情来获取所有这些元素,然后只需更换内部

tomatosoup = BeautifulSoup(myhtml)

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

for chunk in tomatochunks:
   #remove the stuff