为了账号安全,请及时绑定邮箱和手机立即绑定

如何将一行转换为列表?

如何将一行转换为列表?

至尊宝的传说 2022-06-07 19:09:25
我想将下面的行转换为列表:OK      DiskDrive       SDX  SAMSUNG MZNLN256HMHQ-000H1       SCSI\DIS...我的输出应该是这样的:['OK', 'DiskDrive', 'SDX  SAMSUNG MZNLN256HMHQ-000H1', 'SCSI\DIS...']我试过这个并没有成功地得到我想要的东西:List = re.sub("(\w+\s{0,2}+\w)", " ", line).split()
查看完整描述

3 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

如果我理解正确,您想连续分割超过 2 个空格。为此,您可以使用re's ownsplit而不是处理sub. 表示超过 2的{3,}方法是从 3 到无限次:


import re


s = "OK      DiskDrive       SDX  SAMSUNG MZNLN256HMHQ-000H1       SCSI\DIS"


print(re.split("\s{3,}", s))

给出:


['OK', 'DiskDrive', 'SDX  SAMSUNG MZNLN256HMHQ-000H1', 'SCSI\\DIS']


查看完整回答
反对 回复 2022-06-07
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

您可以使用内置字符串方法执行此操作,方法split是注意您只想在那些较大的空间上拆分:


final_list = [l.strip() for l in my_line.split('   ') if l is not '']

# ['OK', 'DiskDrive', 'SDX  SAMSUNG MZNLN256HMHQ-000H1', 'SCSI\\DIS...']

这if l is not ''只是确保您最终列表中不会出现任何空字符串。


查看完整回答
反对 回复 2022-06-07
?
冉冉说

TA贡献1877条经验 获得超1个赞

使用 findall: 重新排列至少一个非空白字符、三个空白字符、零个或多个非空白字符或任何字符。


 string="OK      DiskDrive       SDX  SAMSUNG MZNLN256HMHQ-000H1       SCSI\DIS"

 pattern="([\S]+\s{0,2}[\S\w]*)"

 matches=re.findall(pattern,string)

 for match in matches:

     print(match)

输出:


 OK   

 DiskDrive   

 SDX  SAMSUNG

 MZNLN256HMHQ-000H1   

 SCSI\DIS


查看完整回答
反对 回复 2022-06-07
  • 3 回答
  • 0 关注
  • 119 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信