第一次出现分隔符时分割字符串的最佳方法是什么?例如,

"123mango abcd mango kiwi peach"


第一次分割符mango获得:

"abcd mango kiwi peach"


#1 楼

来自文档:

str.split([sep[, maxsplit]])
使用sep作为分隔符字符串,返回字符串中单词的列表。如果指定了maxsplit,则最多完成maxsplit拆分(因此,列表中最多包含maxsplit+1个元素)。

s.split('mango', 1)[1]


评论


注意:如果在达到最大拆分数之后可以执行更多拆分,则列表中的最后一个元素将包含字符串的其余部分(包括任何sep字符/字符串)。

– BuvinJ
19-09-10在13:01



#2 楼

>>> s = "123mango abcd mango kiwi peach"
>>> s.split("mango", 1)
['123', ' abcd mango kiwi peach']
>>> s.split("mango", 1)[1]
' abcd mango kiwi peach'


评论


@瑞士:那又怎样。技术仍然是相同的。

–伊格纳西奥·巴斯克斯(Ignacio Vazquez-Abrams)
2011年8月1日19:55

@Ignacio:我只是指出来。没有理由用部分正确的答案代替完全正确的答案。

–瑞士
2011年8月1日19:57

技术上假定正确的定界符。 “第一个”是[1]索引。我们都引用的那个当然是零位索引。 :D语义学。

–艾萨克·科贝特(Izaac Corbett)
17年11月15日在13:19

“值”参数必须是标量或字典,但是您传递了“列表”,我用s.split(“ mango”,1)[1]返回了此列表

– yuliansen
20-09-28在6:14



#3 楼

对我来说,更好的方法是:

s.split('mango', 1)[-1]


...因为如果发生的情况不在字符串中,您将得到“ IndexError: list index out of range"

因此-1不会受到任何伤害,因为已经将发生的次数设置为1。

评论


如前所述,它是应用split()方法的次数。方法将仅找到并应用第一个“ mango”字符串。

– Alex
17年7月1日在6:57



#4 楼

您还可以使用str.partition

>>> text = "123mango abcd mango kiwi peach"

>>> text.partition("mango")
('123', 'mango', ' abcd mango kiwi peach')

>>> text.partition("mango")[-1]
' abcd mango kiwi peach'

>>> text.partition("mango")[-1].lstrip()  # if whitespace strip-ing is needed
'abcd mango kiwi peach'


使用str.partition的优点是它总是会返回以下形式的元组:

(<pre>, <separator>, <post>)


因此,使输出的拆包变得非常灵活,因为结果元组中总是会有3个元素。

评论


如果某些行仅包含一个键,这对于从一行文本创建键值对非常有用,因为正如您指出的那样,您总是会得到一个元组:key,_,value = text_line.partition('' )

– PJ Singh
20 Dec 5'的16:51

#5 楼

df.columnname[1].split('.', 1)


这将拆分首次出现的'。'数据。在字符串或数据框列值中。