我试图剥夺所有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)
答案 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)