regex 在Python中从列表中删除空字符串

b4wnujal  于 2023-06-07  发布在  Python
关注(0)|答案(2)|浏览(243)

我需要拆一根绳子。我用这个:

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

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

ulydmbyx

ulydmbyx1#

正如nhahtdh所指出的,空字符串是意料之中的,因为字符串的开头和结尾都有一个\n,但是如果它们打扰了你,你可以非常快速有效地filter它们。

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

filter通常接受一个可调用函数作为第一个参数,并创建一个列表,其中删除了function(element)返回False的所有元素。这里给出了None,它触发了一个特殊情况:如果bool(element)为false,则删除该元素。由于bool('')为false,因此将其删除。
另请参阅手册。

jaxagkaj

jaxagkaj2#

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

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

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

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

[1:-1]获取结果的副本,并包括从1开始的所有索引(即移除第一元素),并且在-2处结束(即,倒数第二个元素。第二个指数是排他性的)
一个更长且不太优雅的替代方案是就地修改列表:

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]

相关问题