如何将一行转换为列表?

2024-09-28 22:25:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将以下行转换为列表:

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

Tags: re列表lineoksdxlistsplitdis
3条回答

如果我理解正确,您希望在一行中拆分两个以上的空格。为此,您可以使用^{}自己的^{}而不是处理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']

使用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

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

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 ''只会确保最终列表中不会出现任何空字符串

相关问题 更多 >