Dividindo no último delimitador na string Python?


205

Qual é o idioma Python recomendado para dividir uma string na última ocorrência 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']

mysplitusa um segundo argumento que é a ocorrência do delimitador a ser dividido. Como na indexação de lista regular, -1significa o último do final. Como isso pode ser feito?

Respostas:


357

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

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

str.rsplit()permite especificar quantas vezes dividir, enquanto str.rpartition()divide apenas 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 única.

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

Ambos os métodos começam a se dividir do lado direito da string; fornecendo o str.rsplit()máximo como o segundo argumento, você pode dividir apenas as ocorrências mais à direita.


19

Você pode usar o rsplit

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

Para obter a string ao contrário.


5

Eu apenas fiz isso por diversão

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

Cuidado : Consulte o primeiro comentário abaixo, onde esta resposta pode dar errado.


2
'apenas por diversão', mas também muito errado, porque se o delimitador não for apenas um caractere ou um caractere repetido, suas divisões escolherão, na melhor das hipóteses, os pontos errados para dividir.
Martijn Pieters
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.