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.