【问题标题】:How to split a list of list by numbers?如何按数字拆分列表列表?
【发布时间】:2019-11-20 14:04:04
【问题描述】:
my_list = ['Rob Kardashian 00052369 1987-03-17 Reality Star',
'Brooke Barry 00213658 2001-03-30 TikTok Star',
'Bae De Leon 00896351 1997-08-02 Volleyball Player',
'Jonas Blue 02369785 1990-08-02 Music Producer']

我有一个人名、身份证、出生日期和职业的列表。我想按姓名、身份证、出生日期和他们的职业来划分每个人。

我尝试了一些愚蠢的方法,但只能完成部分工作,我想知道有没有更好的解决方案?

下面是我的代码:

import re 

def remove(my_list): 
    pattern = '[0-9]'
    my_list = [re.sub(pattern, '', i) for i in my_list] 
    return my_list

print(remove(my_list))

但是数字不见了['Rob Kardashian -- Reality Star', 'Brooke Barry -- TikTok Star', 'Bae De Leon -- Volleyball Player', 'Jonas Blue -- Music Producer']

然后,我删除了'--'

[s.replace(' -- ',' ') for s in remove(my_list)]

['Rob Kardashian  Reality Star','Brooke Barry  TikTok Star','Bae De Leon  Volleyball Player','Jonas Blue  Music Producer']

我的预期输出将是一个数据框:

pd.DataFrame(my_list)

感谢您的帮助。

【问题讨论】:

  • 我会考虑使用更明确的正则表达式来使用命名组实际匹配每个字段:regex101.com/r/rV7Azs/2

标签: python regex list


【解决方案1】:

你可以使用re.split:

import re
my_list = ['Rob Kardashian 00052369 1987-03-17 Reality Star', 'Brooke Barry 00213658 2001-03-30 TikTok Star', 'Bae De Leon 00896351 1997-08-02 Volleyball Player','Jonas Blue 02369785 1990-08-02 Music Producer']
new_l = [re.split('\s(?=\d)|(?<=\d)\s', i) for i in my_list]

输出:

[['Rob Kardashian', '00052369', '1987-03-17', 'Reality Star'], 
 ['Brooke Barry', '00213658', '2001-03-30', 'TikTok Star'], 
 ['Bae De Leon', '00896351', '1997-08-02', 'Volleyball Player'], 
 ['Jonas Blue', '02369785', '1990-08-02', 'Music Producer']]

正则表达式解释:

\s(?=\d):匹配空格后跟数字的任何实例。

|(交替):尝试匹配其左侧的每个表达式,或匹配其右侧的每个表达式,一旦找到有效匹配就停止。

(?&lt;=\d)\s:匹配任何以数字开头的空格实例。

【讨论】:

  • 我能知道'\s(?=\d)|(?
  • 也许您还想看看regex101.com 以快速构建适合您需求的正则表达式...
  • 谢谢你们! @Ajax1234@Ouss
  • @Jancos 很高兴为您提供帮助!
猜你喜欢
  • 2015-07-26
  • 2019-06-27
  • 1970-01-01
  • 2017-06-15
  • 1970-01-01
  • 2020-01-18
  • 1970-01-01
  • 2016-01-17
  • 1970-01-01
相关资源
最近更新 更多