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"

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]

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'

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.


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.


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

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.