拆分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表示从末尾开始的最后一个。如何做到这一点呢?

306648 次浏览

使用.rsplit().rpartition()代替:

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

str.rsplit()让你指定拆分的次数,而str.rpartition()只拆分一次,但总是返回固定数量的元素(前缀,分隔符&Postfix),并且对于单个分割情况更快。

演示:

>>> 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中获取字符串。