Splitting on last delimiter in Python string?


Translate

What's the recommended Python idiom for splitting a string on the last occurrence of the delimiter in the string? example:

# 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 takes a second argument that is the occurrence of the delimiter to be split. Like in regular list indexing, -1 means the last from the end. How can this be done?


All Answers
  • Translate

    Use .rsplit() or .rpartition() instead:

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

    str.rsplit() lets you specify how many times to split, while str.rpartition() only splits once but always returns a fixed number of elements (prefix, delimiter & postfix) and is faster for the single split case.

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

    Both methods start splitting from the right-hand-side of the string; by giving str.rsplit() a maximum as the second argument, you get to split just the right-hand-most occurrences.


  • Translate

    You can use rsplit

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

    To get the string from reverse.


  • Translate

    I just did this for fun

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