ti-enxame.com

Dividindo no último delimitador em Python string?

Qual é a expressão idiomática Python para dividir uma string na ocorrência last do delimitador na string? exemplo:

# 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 aceita um segundo argumento que é a ocorrência do delimitador a ser dividido. Como na indexação normal de listas, -1 significa o último do final. Como isso pode ser feito?

148
user248237

Use .rsplit() ou .rpartition() em vez disso:

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

str.rsplit() permite que você especifique quantas vezes dividir, enquanto str.rpartition() apenas divide uma vez, mas sempre retorna um número fixo de elementos (prefixo, delimitador e postfix) e é mais rápido para o caso de divisão simples.

Demonstração:

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

Os dois métodos começam a ser divididos do lado direito da string; Dando str.rsplit() um máximo como o segundo argumento, você começa a dividir apenas as ocorrências mais à direita.

249
Martijn Pieters

Você pode usar o rsplit

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

Para obter a seqüência de reverso.

8
Vivek Ananthan

Eu fiz isso por diversão

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