Membelah pembatas terakhir dalam string Python?


205

Apa idiom Python yang disarankan untuk memisahkan string pada kejadian terakhir dari pembatas dalam string? contoh:

# instead of regular split
>> s = "a,b,c,d"
>> s.split(",")
>> ['a', 'b', 'c', 'd']

# ..split only on last occurrence of ',' in string:
>>> s.mysplit(s, -1)
>>> ['a,b,c', 'd']

mysplitmengambil argumen kedua yaitu terjadinya pembatas untuk dipecah. Seperti dalam pengindeksan daftar reguler, -1berarti yang terakhir dari akhir. Bagaimana ini bisa dilakukan?

Jawaban:


357

Gunakan .rsplit() atau .rpartition()sebagai gantinya:

s.rsplit(',', 1)
s.rpartition(',')

str.rsplit()memungkinkan Anda menentukan berapa kali untuk dipecah, sementara str.rpartition()hanya membelah sekali tetapi selalu mengembalikan jumlah elemen yang tetap (prefix, delimiter & postfix) dan lebih cepat untuk case split tunggal.

Demo:

>>> s = "a,b,c,d"
>>> s.rsplit(',', 1)
['a,b,c', 'd']
>>> s.rsplit(',', 2)
['a,b', 'c', 'd']
>>> s.rpartition(',')
('a,b,c', ',', 'd')

Kedua metode mulai memisahkan dari sisi kanan string; dengan memberikan str.rsplit()maksimal sebagai argumen kedua, Anda bisa membagi hanya kejadian paling kanan.


19

Anda dapat menggunakan rsplit

string.rsplit('delimeter',1)[1]

Untuk mendapatkan string dari terbalik.


5

Saya hanya melakukan ini untuk bersenang-senang

    >>> s = 'a,b,c,d'
    >>> [item[::-1] for item in s[::-1].split(',', 1)][::-1]
    ['a,b,c', 'd']

Perhatian : Lihat komentar pertama di bawah ini di mana jawaban ini bisa salah.


2
'hanya untuk bersenang-senang' tetapi juga sangat salah, karena jika pembatas bukan hanya satu karakter atau karakter yang diulang, perpecahan Anda akan memilih, paling tidak, poin yang salah untuk dipecah.
Martijn Pieters
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.