Python正则表达式:删除某些HTML标记及其中的内容

时间:2013-07-05 12:23:39

标签: python html regex tags

如果我有一个包含此字符串的字符串:

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

我想知道如何使用正则表达式模式执行此操作? 我试过的:

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

但它将离开

</span>

这次你可以帮我使用re模块吗?我将学习下一步的HTML解析器

1 个答案:

答案 0 :(得分:7)

首先要做的事情是:Don’t parse HTML using regular expressions

话虽如此,如果该span标记中没有额外的span标记,那么你可以这样做:

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

注意:段落标记不应该在span标记内(仅phrasing content是)。


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