如何按数字拆分一个嵌套列表?

3
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))

数字已经消失了['罗布·卡戴珊 -- 真人秀明星', '布鲁克·巴里 -- TikTok明星', 'Bae De Leon -- 排球运动员', '乔纳斯·布鲁 -- 音乐制作人']

然后,我删除了“--”

[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)

感谢您的帮助。

我会考虑使用具名组来编写更明确的正则表达式,以实际匹配每个字段:https://regex101.com/r/rV7Azs/2 - Blorgbeard
1个回答

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:匹配前面带有数字的空格。


我可以知道'\s(?=\d)|(?<=\d)\s'是什么意思吗? - user10835913
也许您还想看一下 http://regex101.com,以快速构建符合您需求的正则表达式... - Ouss
谢谢你们两位!@Ajax1234@Ouss - user10835913
@Jancos 很高兴能帮忙! - Ajax1234

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接