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

2024-06-10 19:11:22 发布

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

我想制作一个python脚本,它可以:

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

我使用这个:

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

然而,在我的一些网页上,我发现了这种表达

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

所以我试着这样做:

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

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

我需要删除与类“toujours\u cacher”的跨度之间的内容。 有没有办法用一个RE来做

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


Tags: re脚本网页内容size建议classspan
2条回答

这在正则表达式中是不可能的-它们不能将分隔符匹配到任意深度。您需要转而使用实际的解析器

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

from bs4 import BeautifulSoup

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

这将返回具有类toujours_cacher的所有span标记的列表

相关问题 更多 >