Python dizesindeki son sınırlayıcıya bölme?


207

Bir dizgiyi dizedeki sınırlayıcının son tekrarında bölmek için önerilen Python deyimi nedir ? misal:

# 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']

mysplitbölünecek sınırlayıcının ortaya çıktığı ikinci bir argüman alır. Normal liste indekslemesinde olduğu gibi, -1sondan sonuncusu anlamına gelir. Bu nasıl yapılabilir?

Yanıtlar:


363

Kullanın .rsplit() veya .rpartition()bunun yerine:

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

str.rsplit()kaç kez bölüneceğini belirtmenize izin verir, str.rpartition()yalnızca bir kez böler ancak her zaman sabit sayıda öğe (önek, sınırlayıcı ve postfix) döndürür ve tek bölünmüş durum için daha hızlıdır.

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')

Her iki yöntem de dizenin sağ tarafından bölünmeye başlar; str.rsplit()ikinci argüman olarak maksimum değeri vererek , en sağdaki olayları bölebilirsiniz.


19

Rsplit kullanabilirsiniz

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

Dizeyi tersinden almak için.


5

Bunu sadece eğlence için yaptım

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

Dikkat : Bu cevabın yanlış gidebileceği aşağıdaki ilk yoruma bakın.


2
'sadece eğlence için' ama aynı zamanda çok yanlış, çünkü sınırlayıcı sadece tek bir karakter veya tekrarlanan bir karakter değilse, bölünmeleriniz en iyi ihtimalle bölünecek yanlış noktaları seçecektir.
Martijn Pieters
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.