关于regex:从python中的列表中删除空字符串

Removing empty strings from a list in python

我需要把绳子分开。我用这个:

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

但我有一个错误:我的结果有两个空字符串(""),一个在"Лев"之前。我怎么摆脱他们?

enter image description here


正如Nhahtdh所指出的,由于在字符串的开始和结束处都有一个
,所以应该是空字符串,但是如果它们打扰到您,您可以非常快速和有效地filter它们。

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


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

1
2
p.split(string.strip('
'
))

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

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

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

一个较长且不太优雅的替代方案是就地修改列表:

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

注意,在这两个解决方案中,第一个和最后一个元素必须是空字符串。如果有时输入在开始或结束时不包含这些空字符串,那么它们将出现错误行为。然而,它们也是最快的解决方案。

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

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