44

我有一个来自日志文件的格式化字符串,如下所示:

>>> a="test                            result"

也就是说,测试和结果被一些空格分隔 - 它可能是使用格式化字符串创建的,它给出了test一些恒定的间距。

简单的拆分不会解决问题:

>>> a.split(" ")
['test', '', '', '', ... '', '', '', '', '', '', '', '', '', '', '', 'result']

split(DELIMITER, COUNT)清除了一些不必要的值:

>>> a.split(" ",1)
['test', '                           result']

这有帮助 - 但当然,我真的需要:

['test', 'result']

我可以使用split()后跟map+ strip(),但我想知道是否有更 Pythonic 的方式来做到这一点。

谢谢,

亚当

更新:如此简单的解决方案!谢谢你们。

4

6 回答 6

80

只是不给任何分隔符?

>>> a="test                            result"
>>> a.split()
['test', 'result']
于 2010-03-22T13:16:16.677 回答
46
>>> import re
>>> a="test                            result"
>>> re.split(" +",a)
['test', 'result']

>>> a.split()
['test', 'result']
于 2010-03-22T13:15:01.833 回答
20

只是这应该工作:

a.split()

例子:

>>> 'a      b'.split(' ')
['a', '', '', '', '', '', 'b']
>>> 'a      b'.split()
['a', 'b']

文档中:

如果 sep 未指定或为 None,则应用不同的拆分算法:连续空格的运行被视为单个分隔符,如果字符串具有前导或尾随空格,则结果将在开头或结尾不包含空字符串。因此,使用 None 分隔符拆分空字符串或仅包含空格的字符串将返回 []。

于 2010-03-22T13:14:56.293 回答
3

简单有什么问题a.split()吗?

于 2010-03-22T13:15:23.920 回答
3

如果您想拆分 1 次或多次出现的分隔符,并且不想只依靠默认值split()而没有发生任何参数来匹配您的用例,您可以使用正则表达式来匹配分隔符。以下将使用一个或多个 of.作为分隔符:

s = 'a.b....c......d.ef...g'
sp = re.compile('\.+').split(s)
print(sp)

这使:

['a', 'b', 'c', 'd', 'ef', 'g']
于 2018-08-16T22:21:05.043 回答
1

只需添加一种方式,在分隔符与空格不同的情况下更有用,并且 s.split() 将不起作用。

像 str = "Python,is,,more,,,,,flexible"。

In [27]: s = "Python,is,,more,,,,,flexible"

In [28]: str_list = list(filter(lambda x: len(x) > 0, s.split(",")))

In [29]: str_list
Out[29]: ['Python', 'is', 'more', 'flexible']
于 2017-08-22T06:20:57.767 回答