Разделение на последний разделитель в строке Python?
Какая рекомендуемая идиома Python для разделения строки на последнее вхождение разделителя в строке? Пример:
# 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']
mysplit
принимает второй аргумент, который является разложением разделителя. Как и в обычном индексировании списка, -1
означает последний из конца. Как это можно сделать?
Ответы
Ответ 1
.rsplit()
используйте .rsplit()
или .rpartition()
:
s.rsplit(',', 1)
s.rpartition(',')
str.rsplit()
позволяет указать, сколько раз разделить, в то время как str.rpartition()
разбивается один раз, но всегда возвращает фиксированное количество элементов (префикс, разделитель и постфикс) и быстрее для одного случая с разделом.
Демо-версия:
>>> 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')
Оба метода начинают расщепление с правой стороны строки; давая str.rsplit()
максимум как второй аргумент, вы можете разделить только самые правые вхождения.
Ответ 2
Я просто сделал это для удовольствия
>>> s = 'a,b,c,d'
>>> [item[::-1] for item in s[::-1].split(',', 1)][::-1]
['a,b,c', 'd']
Ответ 3
Вы можете использовать rsplit
string.rsplit('delimeter',1)[1]
Чтобы получить строку с обратной стороны.