3

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

<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 解析器

4

1 回答 1

7

第一件事:不要使用正则表达式解析 HTML

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

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

附带说明:段落标签不应该放在跨度标签内(只有短语内容是)。


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

于 2013-07-05T12:27:40.813 回答