【问题标题】:How to extract repeating data separately using re如何使用re分别提取重复数据
【发布时间】:2020-05-30 09:10:43
【问题描述】:

我有这段代码,其中包含页面的 html 内容:

page = """<div>
<span class="item_1" dt="2012.03.12">Item Name 1</span>
<span class="item_2" dt="2012.03.6" time="12:51">Item Name 2</span></div>"""

print(re.findall(('class="(a-z_0-9)"')('dt="(0-9.)"')('>(A-Za-z 0-9)<'),page))

最后一行对我不起作用。也许是错的。我需要做的是分别为每个跨度提取类、dt 和文本。

预期输出:

[('item_1', '2012.03.12', 'Item Name 1'),
('item_2','2012.03.6','Item Name 2')]

请帮忙!

【问题讨论】:

    标签: python html python-re


    【解决方案1】:

    re.findall 需要一个 regex 模式 和一个字符串作为参数,因此您需要将 regex 包裹在 r"" 周围并转义任何双引号以获得有效的模式:

    re.findall(r"('class=\"(a-z_0-9)\"')('dt=\"(0-9.)\"')('>(A-Za-z 0-9)<')",page)
    

    您的正则表达式也与您想要的信息不匹配。一个是:

    <span.*class="([^"]*)".*dt="([^"]*)".*>(.*)<\/span>
    

    所以把它们放在一起我们就有了:

    import re
    
    page = """<div>
    <span class="item_1" dt="2012.03.12">Item Name 1</span>
    <span class="item_2" dt="2012.03.6" time="12:51">Item Name 2</span></div>"""
    
    print(re.findall(r'<span.*class="([^"]*)".*dt="([^"]*)".*>(.*)<\/span>',page))
    

    哪些输出:

    [('item_1', '2012.03.12', 'Item Name 1'), ('item_2', '2012.03.6', 'Item Name 2')]
    

    【讨论】:

      【解决方案2】:

      要解析html,最好使用BeautifulSoup,这使得解析变得简单易行。

      from bs4 import BeautifulSoup
      
      page = """<div>
      <span class="item_1" dt="2012.03.12">Item Name 1</span>
      <span class="item_2" dt="2012.03.6" time="12:51">Item Name 2</span></div>"""
      
      soup = BeautifulSoup(page, "html.parser")
      div = soup.find('div')
      
      for elem in div.findAll(["span"]):
          print(elem.text, "|", elem.attrs)
      
      Item Name 1 | {'class': ['item_1'], 'dt': '2012.03.12'}
      Item Name 2 | {'class': ['item_2'], 'dt': '2012.03.6', 'time': '12:51'}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-14
        • 1970-01-01
        • 2019-10-16
        • 1970-01-01
        • 1970-01-01
        • 2020-04-23
        相关资源
        最近更新 更多