我想制作一个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做到这一点?
我很高兴听到您的任何建议:)
答案 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
代码的列表。