Berpisah pada kejadian pertama

309

Apa yang akan menjadi cara terbaik untuk memisahkan sebuah string pada kemunculan pembatas pertama kali?

Sebagai contoh:

"123mango abcd mango kiwi peach"

berpisah pada yang pertama mangountuk mendapatkan:

"abcd mango kiwi peach"
Biji pohon ek
sumber

Jawaban:

522

Dari dokumen :

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

Kembalikan daftar kata-kata dalam string, menggunakan sep sebagai string pembatas. Jika maxsplit diberikan, paling banyak pembagian maxsplit dilakukan (dengan demikian, daftar akan memiliki paling banyak maxsplit+1elemen).

s.split('mango', 1)[1]
Ignacio Vazquez-Abrams
sumber
Catatan: jika lebih banyak pemisahan dapat dilakukan setelah mencapai maxsplithitungan, elemen terakhir dalam daftar akan berisi sisa string (termasuk semua sepkarakter / string).
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'
utdemir
sumber
8
@ Diam: Jadi apa. Tekniknya masih sama.
Ignacio Vazquez-Abrams
6
@Ignacio: Saya hanya menunjukkannya. Tidak ada alasan untuk memiliki jawaban yang benar sebagian menggantikan jawaban yang sepenuhnya benar.
Swiss
Secara teknis mengasumsikan pembatas yang benar. Yang 'pertama' adalah indeks [1]. Yang kita semua referensi tentu saja akan menjadi indeks zero-ith. : D Semantik.
Izaac Corbett
27

Bagi saya pendekatan yang lebih baik adalah:

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

... karena jika terjadi kejadian itu tidak ada dalam string, Anda akan mendapatkan " IndexError: list index out of range".

Karena itu -1tidak akan mendapatkan kerugian karena jumlah kejadian sudah diatur ke satu.

Alex
sumber
1
Seperti yang ditulis sebelum itu adalah jumlah kejadian di mana metode split () sedang diterapkan. Metode hanya akan menemukan dan menerapkan string 'mangga' pertama.
Alex
2

Anda juga dapat menggunakan 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'

Keuntungan menggunakan str.partitionadalah selalu mengembalikan tuple dalam bentuk:

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

Jadi ini membuat membongkar output sangat fleksibel karena selalu ada 3 elemen dalam tuple yang dihasilkan.

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

Ini akan membagi data dengan kemunculan pertama '.' dalam nilai kolom string atau data frame.

himanshu arora
sumber