为了账号安全,请及时绑定邮箱和手机立即绑定

使用正则表达式在标记后获取第二个 div

使用正则表达式在标记后获取第二个 div

MMTTMM 2022-05-24 10:53:28
我有一个如下的网站代码:CODE ABOVE<div class="full">   <div>      <div> **<== WANT TO START GRABBING HERE **        <div>CONTENT</div>        <div>CONTENT</div>        <div>CONTENT</div>        <div>CONTENT</div>      </div> **<== STOP GRABBING HERE **   </div></div>CODE BELOW我正在尝试在 Python 中使用正则表达式,以便在 div 关闭<div>后<div class="full">停止后获取第二个的全部内容,如上面的代码所示。我的问题是:可以使用正则表达式在 Python 中执行此操作吗?怎么做?
查看完整描述

3 回答

?
子衿沉夜

TA贡献1828条经验 获得超3个赞

对于 html 元素选择Beautiful Soup是您所需要的,@QHarr答案应该有效只需检查您使用的编码。


但是,如果您想要正则表达式解决方案,只需使您的字符串变平(没有换行符)而不是搜索元素:


        import re


        html = """<div class="full">

           <div>

              <div> **<== WANT TO START GRABBING HERE **

                <div>CONTENT</div>

                <div>CONTENT</div>

                <div>CONTENT</div>

                <div>CONTENT</div>

              </div> **<== STOP GRABBING HERE **

           </div>

        </div>"""

        sep = 'xxxx****'   # dummy string to replace \n and put them back

        r = '<div class="full">[\s{0}]*<div>(.*)</div>[\s{0}]*</div>'.format(sep)

        # search will return first matching element.

        l = re.search(r, html.replace('\n',sep)).groups(0)[0]

        # findall will return all element matching the pattern if you have more than one use findall

        # l = re.findall(r, html.replace('\n',sep))[0]

        print(l.replace(sep, '\n'))


查看完整回答
反对 回复 2022-05-24
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

对于您的特定情况,请尝试以下正则表达式:

(<div>\s+){2}([\s\w</>]*?)(</div>\s+){2}

然后从中提取所需的组。

但是,我建议改用BeautifulSoup,它更简单、更强大。


查看完整回答
反对 回复 2022-05-24
?
神不在的星期二

TA贡献1963条经验 获得超6个赞

您可以结合使用类和类型css 选择器以及子组合器来完成此操作


from bs4 import BeautifulSoup as bs


html = '''<div class="full">

   <div>

      <div>

        <div>CONTENT</div>

        <div>CONTENT</div>

        <div>CONTENT</div>

        <div>CONTENT</div>

      </div>

   </div>

</div>'''


soup = bs(html, 'lxml')

print(soup.select_one('.full > div > div'))


查看完整回答
反对 回复 2022-05-24
  • 3 回答
  • 0 关注
  • 207 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号