Python文字列の最後の区切り文字で分割しますか?


204

文字列内の最後の区切り文字の出現時に文字列を分割するための推奨される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分割する区切り文字の出現である2番目の引数を取ります。通常のリストのインデックス付けと同様に-1、最後から最後までを意味します。これはどのように行うことができますか?

回答:


356

.rsplit() または.rpartition()代わりに使用:

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

str.rsplit()分割する回数を指定できますが、str.rpartition()分割は1回だけですが、常に固定数の要素(プレフィックス、デリミタ、ポストフィックス)を返し、単一の分割の場合は高速です。

デモ:

>>> 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()2番目の引数として最大を、あなただけの右手-最も出現を分けてもらいます。



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.