파이썬 문자열에서 마지막 구분 기호로 나누시겠습니까?


203

문자열에서 마지막 구분 기호가 나타날 때 문자열을 분할하는 데 권장되는 파이썬 관용구는 무엇입니까 ? 예:

# 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끝에서 마지막을 의미합니다. 이것을 어떻게 할 수 있습니까?

답변:


355

.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()두 번째 인수로 최대, 당신은 단지 오른쪽 가장 발생을 분할 얻을.


19

rsplit을 사용할 수 있습니다

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

문자열을 반대로 가져 오려면


5

난 그냥 재미를 위해 이것을했다

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

주의 :이 답변이 잘못 될 수있는 아래의 첫 번째 설명을 참조하십시오.


2
구분 기호가 단일 문자이거나 반복되는 문자가 아닌 경우 분할은 분할 할 잘못된 지점을 기껏해야 선택하기 때문입니다.
Martijn Pieters
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.