python split,为什么我在输出中看不到所有的连字符

时间:2018-12-16 20:10:00

标签: python python-3.x

test_string = '----a---b--c-d'
a = test_string.split('-')
print(a)

输出

['', '', '', '', 'a', '', '', 'b', '', 'c', 'd']

我假设空列表项目('')是连字符。我的问题是,为什么在a和b之间只有两个”而不是像输入中的三个?

3 个答案:

答案 0 :(得分:3)

让我们用一些字符串替换空字段:

test_string = '<field>-<field>-<field>-<field>-a-<field>-<field>-b-<field>-c-d'

现在您可以清楚地看到这些字段的位置。

您会看到ab之间只有2个字段。特殊情况是在字符串的开头,其中开头的空字符串也被视为字段。

答案 1 :(得分:1)

str.split使用其参数作为分隔符,因此不会将其包含在返回的列表中。

使用re.split(r'-', test_string)时也是如此,除非您将 pattern 放在括号中。因此,如果您真的想在拆分字符串时保留-,建议您执行以下操作:

test_string = '----a---b--c-d'

import re
a = re.split(r'(-)', test_string)
print(a)

这将打印出来:

['', '-', '', '-', '', '-', '', '-', 'a', '-', '', '-', '', '-', 'b', '-', '', '-', 'c', '-', 'd']

如果您想知道为什么此输出中有很多空字符串,这是因为re.split将保留-字符之间的任何内容,即使它们是零字符串,长度。

一个简短的示例可能有助于了解正在发生的事情:

test_string = 'cat-dog-bird'

import re
a = re.split(r'(-)', test_string)
print(a)

这将打印出来:

['cat', '-', 'dog', '-', 'bird']

如果不想使用-字符,请从r'(-)'中除去括号。也就是说,将r'(-)'更改为r'-',或仅使用:

a = test_string.split('-')

答案 2 :(得分:0)

这是默认的split()函数操作。

因此,基本上,如果您将其他字符分开,则总是得到x-

  

使用指定的分隔符分隔空字符串将返回['']。

https://docs.python.org/3/library/stdtypes.html