从python中的列表中删除空字符串

时间:2014-02-21 21:43:16

标签: python regex split

我需要拆分一个字符串。我正在使用这个:

def ParseStringFile(string):
p = re.compile('\W+')
result = p.split(string)

但我有一个错误:我的结果有两个空字符串(''),一个在'Лев'之前。我如何摆脱它们?

enter image description here

2 个答案:

答案 0 :(得分:4)

正如nhahtdh指出的那样,空字符串是预期的,因为在字符串的开头和结尾有一个\n,但如果他们打扰你,你可以非常快速有效地filter。< / p>

>>> filter(None, ['', 'text', 'more text', ''])
['text', 'more text']

答案 1 :(得分:2)

您可以在匹配之前删除字符串中的所有换行符:

p.split(string.strip('\n'))

或者,拆分字符串,然后删除第一个和最后一个元素:

result = p.split(string)[1:-1]

[1:-1]获取结果的副本,包括从1开始的所有索引(即删除第一个元素),结束于-2(即第二个到最后一个元素。第二个索引是独占的)< / p>

更长,更不优雅的替代方案是就地修改列表:

result = p.split(string)
del result[-1]   # remove last element
del result[0]    # remove first element

请注意,在这两个解决方案中,第一个和最后一个元素必须为空字符串。如果有时输入在开头或结尾不包含这些空字符串,那么它们会行为不端。但它们也是最快的解决方案。

如果要在结果中删除所有空字符串,即使它们发生在结果列表中,您也可以使用列表理解:

[word for word in p.split(string) if word]