如果我有一个包含此字符串的字符串:
<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解析器
答案 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>
中,.*?
只会匹配,直到找到它立即停止的结束范围。