根据字符串中最后一次出现的分隔符拆分字符串时,推荐的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表示从末尾开始的最后一个。如何做到这一点呢?


使用.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()一个最大值作为第二个参数,您可以分割右手最多的出现。

如果你只需要最后一个元素,但有可能分隔符不存在于输入字符串中,或者是输入中的最后一个字符,请使用以下表达式:

# last element, or the original if no `,` is present or is the last character
s.rsplit(',', 1)[-1] or s
s.rpartition(',')[-1] or s

如果你需要删除分隔符,即使它是最后一个字符,我将使用:

def last(string, delimiter):
    """Return the last element from string, after the delimiter

    If string ends in the delimiter or the delimiter is absent,
    returns the original string without the delimiter.

    """
    prefix, delim, last = string.rpartition(delimiter)
    return last if (delim and last) else prefix

这使用了string.rpartition()仅在存在分隔符时返回分隔符作为第二个参数,否则返回空字符串的事实。


我只是为了好玩

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

注意:参考下面的第一条评论,这个答案可能会出错。


您可以使用rsplit

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

从reverse中获取字符串。