test_string = '----a---b--c-d'
a = test_string.split('-')
print(a)
['', '', '', '', 'a', '', '', 'b', '', 'c', 'd']
我假设空列表项目('')是连字符。我的问题是,为什么在a和b之间只有两个”而不是像输入中的三个?
答案 0 :(得分:3)
让我们用一些字符串替换空字段:
test_string = '<field>-<field>-<field>-<field>-a-<field>-<field>-b-<field>-c-d'
现在您可以清楚地看到这些字段的位置。
您会看到a
和b
之间只有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-
使用指定的分隔符分隔空字符串将返回['']。