Python regex:删除某些HTML标记及其内容

2024-06-26 01:40:36 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有一个包含以下内容的字符串:

<p><span class=love><p>miracle</p>...</span></p><br>love</br>

我想删除字符串:

<span class=love><p>miracle</p>...</span>

或许还有其他一些HTML标签。同时,保留其他标签及其内容。

结果应该是这样的:

<p></p><br>love</br>

我想知道如何使用regex模式? 我试过的:

r=re.compile(r'<span class=love>.*?(?=</span>)')
r.sub('',s)

但它会离开

</span>

这次你能帮我用重新模块吗?接下来我将学习html解析器


Tags: 模块字符串brre内容html模式标签
1条回答
网友
1楼 · 发布于 2024-06-26 01:40:36

先做第一件事:Don’t parse HTML using regular expressions

也就是说,如果该范围标记中没有其他范围标记,则可以这样做:

text = re.sub('<span class=love>.*?</span>', '', text)

另一方面:段落标记不应该在span标记内(只有phrasing content是)。


您尝试过的表达式<span class=love>.*?(?=</span>)已经非常好了。问题是,展望(?=</span>)永远不会与它的展望相匹配。因此表达式将在关闭span标记之前立即停止。现在,您可以在末尾手动添加一个结束跨度,即<span class=love>.*?(?=</span>)</span>,但这并不是真正必要的:.*?是一个非贪婪的表达式。它将尽可能少地匹配。因此在.*?</span>中,.*?将只匹配,直到找到一个闭合跨度,它立即停止。

相关问题 更多 >