代码之家  ›  专栏  ›  技术社区  ›  Hrvoje

将列表项拆分为元素之间可变空格数的多个项

  •  0
  • Hrvoje  · 技术社区  · 5 年前

    我有一个存储从Beautiful soup元素检索到的列表的函数。列表由HTML生成 li 元素来自 ul 在某些情况下 div :

    carPayment=div.ul.get_text().strip().replace('\n', ' ').replace('\r', '').splitlines()
    

    这正好说明了这一点 列表项(空格是有意的):

    ['cache or debit                                                                   credit or loan                                                                   leasing']
    

    我该如何将其拆分到列表中 三要素 ?

    考虑到这可能是更长的列表。所以列表应该在3个以上的空格上分开。

    最终输出应为包含三个修剪元素的列表(前后无空格):

    ['cache or debit','credit or loan','leasing']
    

    我更喜欢综合性答案,这样就可以用一行字来回答。到目前为止,我有:

    carPayment=[div.ul.get_text().strip().replace('\n', ' ').replace('\r', '').splitlines()[0].split('                                    ',) for i in div.ul.get_text().strip().replace('\n', ' ').replace('\r', '').splitlines()][0]
    
    
      ['cache or debit','          credit or loan','           leasing']
    
    1 回复  |  直到 5 年前
        1
  •  0
  •   Hrvoje    5 年前

    我在写这篇文章时偶然发现了这个解决方案,所以万一有人在使用 靓汤 并且想要清理检索到的项目列表( li )从无序列表中( ul )在某些情况下 div 以下是解决方案:

    carPayment=[div.ul.get_text().strip().replace('\n', ' ').replace('\r', '').splitlines()[0].split() for i in div.ul.get_text().strip().replace('\n', ' ').replace('\r', '').splitlines()][0]
    

    这将为您提供包含修剪元素的列表:

    ['cache or debit','credit or loan','leasing']
    

    这还将从所有“\r”字符(回车符)和回车换行符对(\n\r)以及所有不需要的空格中清除列表元素。

    如果你的列表中有类似词典的条目,你可以这样做:

    carUL = section.div.ul.get_text().strip().replace('\n', ' ').replace('\r', '').splitlines()[0]
    carUL = [i.strip() for i in carUL.split('  ') if i]