第一次出现时分裂


309

在首次出现定界符时分割字符串的最佳方法是什么?

例如:

"123mango abcd mango kiwi peach"

首先分裂mango得到:

"abcd mango kiwi peach"

Answers:


522

文档

str.split([sep[, maxsplit]])

使用sep作为分隔符字符串,返回字符串中单词的列表。如果给出了maxsplit,则最多完成maxsplit分割(因此,列表中最多maxsplit+1包含元素)。

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

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

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

8
@瑞士:那又怎样。技术仍然是相同的。
伊格纳西奥·巴斯克斯

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

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

27

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

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

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

因此-1不会造成任何伤害的原因发生次数已经设置为1。


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

2

您也可以使用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个元素。


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

这将以第一个出现的“。”分割数据。在字符串或数据框列中的值。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.