寻找正确的RE表达式(python)

时间:2015-07-01 14:29:04

标签: python regex

我想制作一个python脚本,寻找:

    <span class="toujours_cacher">(.)*?</span> 

我用这个RE:

    r"(?i)\<span (\n|\t| )*?class=\"toujours_cacher\"(.|\n)*?\>(.|\n)*?\<\/span\>"

然而,在我的一些页面中,我发现了这种表达方式

    <span class="toujours_cacher">*
    <span class="exposant" size="1">*</span> *</span>

所以我尝试了这个RE:

    r"(?i)\<span (\n|\t| )*?class=\"toujours_cacher\"(.|\n)*?\>(.|\n)*?(\<\/span\>|\<\/span\>(.|\n)*?<\/span>)"

这不好,因为当两者之间没有跨度时,它会寻找下一个。

我需要删除带有“toujours_cacher”类的span之间的内容。 有没有办法用一个RE做到这一点?

我很高兴听到您的任何建议:)

2 个答案:

答案 0 :(得分:0)

使用正则表达式(可证明)这是不可能的 - 它们无法将分隔符与任意深度匹配。您需要转而使用实际的解析器。

答案 1 :(得分:0)

请不要使用正则表达式来解析HTML,因为它不是常规的。您可以使用BeautifulSoup。以下是BeautifulSoup查找代码<span class="toujours_cacher">(.)*?</span>的一个示例。

from bs4 import BeautifulSoup

soup = BeautifulSoup(htmlCode)
spanTags = soup.findAll('span', attrs={'class': 'toujours_cacher'})

这将返回包含类span的所有toujours_cacher代码的列表。