Python:如何基于空格拆分字符串但保留'\ n'?

时间:2018-01-06 15:41:06

标签: python

我想基于空格分割字符串

a = ' girl\n    is'
a.split()
['girl', 'is']

我发现分裂后,'\ n'也会消失。我想要的结果是

['girl\n', 'is']

然后,如果我使用.splitlines方法,返回的结果也不是我想要的。

a.splitlines(True)
[' girl\n', '    is']

你有什么建议吗?谢谢!

4 个答案:

答案 0 :(得分:6)

试试这个

[s for s in a.split(' ') if s]
['girl\n', 'is']

答案 1 :(得分:2)

在性能方面,您应该考虑使用列表推导(如 Ursus's answer 中所述)和str.split(' ')

>>> a = ' girl\n    is'

>>> [word for word in a.split(' ') if word]
['girl\n', 'is']

但是,如果您对功能方法感兴趣,可以使用filter作为:

>>> list(filter(bool, a.split(' ')))
['girl\n', 'is']

此处a.split(' ')会根据空间将您的字符串拆分为分隔符filter (使用bool)将从列表中过滤掉空字符串。

您的代码问题

正如Python str.split document所说:

  • 如果未传递分隔符

      

    或者是None,应用了不同的分割算法:连续空格的运行被视为单个分隔符,如果字符串具有前导,则结果将在开头或结尾处不包含空字符串或尾随空格。因此,将空字符串或仅由空格组成的字符串拆分为无分隔符将返回[]。

  • 如果传递分隔符

      

    连续分隔符未组合在一起,并被视为划分空字符串。使用指定的分隔符拆分空字符串将返回['']。

答案 2 :(得分:2)

你可以使用正则表达式来分割水平空格的任何序列(包括例如标签),但不能垂直:

>>> import re
>>> re.split(r'[^\S\n\r]+', a.strip())
['girl\n', 'is']

# [^...]: not any of ...
# \S:     non whitespace
# \n, \r: line breaking white space 
# [^\S\n\r]+: one or more non-space or non-line-breaking space

答案 3 :(得分:0)

易于理解:

In:
df_time = pd.Series([val.time() for val in df_time])

Out:
0      13:09:00
1      13:11:00
2      13:13:00
3      13:15:00
4      13:17:00
dtype: object

含义:

b=a.split()
c=[i for i in b if i]
print(c)