Разделение на последний разделитель в строке Python?


205

Каков рекомендуемый язык 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означает последний с конца. Как это может быть сделано?

Ответы:


358

Используйте .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()максимум в качестве второго аргумента, вы получите возможность разбить только самые правые вхождения.



5

Я просто сделал это для удовольствия

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

Внимание : обратитесь к первому комментарию ниже, где этот ответ может пойти не так.


2
«просто для удовольствия», но также и очень неправильно, потому что, если разделитель - это не просто один символ или повторяющийся символ, ваши разбиения выберут, в лучшем случае, неправильные точки для разделения.
Мартин Питерс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.