Splitting on last delimiter in Python string?

251,800

Solution 1

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.

Solution 2

You can use rsplit

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

To get the string from reverse.

Solution 3

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

Caution: Refer to the first comment in below where this answer can go wrong.

Share:
251,800
Admin
Author by

Admin

Updated on October 23, 2020

Comments

  • Admin
    Admin over 3 years

    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?