我需要拆一根绳子。我用这个:
def ParseStringFile(string): p = re.compile('\W+') result = p.split(string)
但我有一个错误:我的结果有两个空字符串(''),一个在'Л е'之前。我该怎么摆脱他们?
ulydmbyx1#
正如nhahtdh所指出的,空字符串是意料之中的,因为字符串的开头和结尾都有一个\n,但是如果它们打扰了你,你可以非常快速有效地filter它们。
\n
filter
>>> filter(None, ['', 'text', 'more text', '']) ['text', 'more text']
filter通常接受一个可调用函数作为第一个参数,并创建一个列表,其中删除了function(element)返回False的所有元素。这里给出了None,它触发了一个特殊情况:如果bool(element)为false,则删除该元素。由于bool('')为false,因此将其删除。另请参阅手册。
function(element)
False
None
bool(element)
bool('')
jaxagkaj2#
你可以在匹配字符串之前删除所有的换行符:
p.split(string.strip('\n'))
或者,拆分字符串,然后删除第一个和最后一个元素:
result = p.split(string)[1:-1]
[1:-1]获取结果的副本,并包括从1开始的所有索引(即移除第一元素),并且在-2处结束(即,倒数第二个元素。第二个指数是排他性的)一个更长且不太优雅的替代方案是就地修改列表:
[1:-1]
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]
2条答案
按热度按时间ulydmbyx1#
正如nhahtdh所指出的,空字符串是意料之中的,因为字符串的开头和结尾都有一个
\n
,但是如果它们打扰了你,你可以非常快速有效地filter
它们。filter
通常接受一个可调用函数作为第一个参数,并创建一个列表,其中删除了function(element)
返回False
的所有元素。这里给出了None
,它触发了一个特殊情况:如果bool(element)
为false,则删除该元素。由于bool('')
为false,因此将其删除。另请参阅手册。
jaxagkaj2#
你可以在匹配字符串之前删除所有的换行符:
或者,拆分字符串,然后删除第一个和最后一个元素:
[1:-1]
获取结果的副本,并包括从1开始的所有索引(即移除第一元素),并且在-2处结束(即,倒数第二个元素。第二个指数是排他性的)一个更长且不太优雅的替代方案是就地修改列表:
注意,在这两个解决方案中,第一个和最后一个元素 * 必须 * 是空字符串。如果有时输入在开始或结束时不包含这些空字符串,那么它们将行为不端。这也是“最快”的解决方案。
如果你想删除结果中的 * 所有 * 空字符串,即使它们发生在结果列表中,你可以使用列表解析: