如何用数字分割列表?

时间:2019-07-10 22:08:10

标签: python regex list

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']

我有一个人员姓名,ID,DOB和职业的列表。我想按姓名,ID,DOB及其职业划分每个人。

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

下面是我的代码:

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']

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

enter image description here

pd.DataFrame(my_list)

感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

您可以使用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):匹配空格后跟数字的任何实例。

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

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