从HTML字符串中删除所有div标记

时间:2013-04-03 20:04:16

标签: python regex

我试图剥夺所有div。

输入:

<p>111</p>

<div class="1334">bla</div>

<p>333</p>

<p>333</p>

<div some unkown stuff>bla2</div>

期望的输出:

   <p>111</p>

    <p>333</p>

    <p>333</p>

我尝试了这个但是没有用:

release_content = re.sub("/<div>.*<\/div>/s", "", release_content)

3 个答案:

答案 0 :(得分:8)

Do not use regex for this problem。使用html解析器。这是python中使用BeautifulSoup的解决方案:

from BeautifulSoup import BeautifulSoup

with open('Path/to/file', 'r') as content_file:
    content = content_file.read()

soup = BeautifulSoup(content)
[div.extract() for div in soup.findAll('div')]

with open('Path/to/file.modified', 'w') as output_file:
    output_file.write(str(soup))

答案 1 :(得分:1)

在python中你不需要任何正则表达式的分隔符:

release_content = re.sub("<div>.*<\/div>", "", release_content)

您确定div没有任何属性吗?嵌套div s会发生什么?

答案 2 :(得分:1)

您正在使用贪心运算符:*。在停止之前它会尽可能地匹配。您可以尝试使用非贪婪版本*?。只要您没有嵌套的<div>标签,就可以了。

release_content = re.sub("(?s)<div>.*?<\/div>", "", release_content)

如果您可以使用嵌套的<div>代码,那么您将需要使用像BeautifulSoup这样的HTML库。

根据您的编辑,要考虑属性,您只需修改模式的前导<div>

release_content = re.sub("(?s)<div(?: [^>]*)?>.*?<\/div>", "", release_content)