最初の発生時に分割


309

区切り文字の最初の出現時に文字列を分割する最良の方法は何でしょうか?

例えば:

"123mango abcd mango kiwi peach"

最初mangoに分割して取得:

"abcd mango kiwi peach"

回答:


522

ドキュメントから:

str.split([sep[, maxsplit]])

区切り文字列としてsepを使用して、文字列内の単語のリストを返します。場合maxsplit個が与えられている最大で、maxsplit個の分割が行われます(したがって、リストは最大でなければならないmaxsplit+1要素)。

s.split('mango', 1)[1]

注:maxsplitカウントに達した後でさらに分割を実行できる場合、リストの最後の要素には、残りの文字列(sep文字/文字列を含む)が含まれます。
BuvinJ

64
>>> s = "123mango abcd mango kiwi peach"
>>> s.split("mango", 1)
['123', ' abcd mango kiwi peach']
>>> s.split("mango", 1)[1]
' abcd mango kiwi peach'

8
@スイス:だから何ですか。テクニックは同じです。
Ignacio Vazquez-Abrams、2011

6
@イグナシオ:私はそれを指摘しているだけです。完全に正しい答えの代わりに部分的に正しい答えを持つ理由はありません。
スイス

技術的には正しい区切り文字を想定しています。「最初の」は[1]インデックスです。私たちがすべて参照しているのは、もちろんゼロ番目のインデックスです。:Dセマンティクス。
Izaac Corbett

27

私にとってより良いアプローチは、

s.split('mango', 1)[-1]

...その発生が文字列にない場合は、「」が返されるためIndexError: list index out of range"です。

したがって、問題-1が発生することはありません。発生数はすでに1に設定されています。


1
前に書かれたように、それはメソッドsplit()が適用されている発生の数です。メソッドは最初の「mango」文字列のみを検索して適用します。
Alex

2

あなたも使うことができますstr.partition

>>> text = "123mango abcd mango kiwi peach"

>>> text.partition("mango")
('123', 'mango', ' abcd mango kiwi peach')

>>> text.partition("mango")[-1]
' abcd mango kiwi peach'

>>> text.partition("mango")[-1].lstrip()  # if whitespace strip-ing is needed
'abcd mango kiwi peach'

を使用する利点str.partitionは、常に次の形式でタプルを返すことです。

(<pre>, <separator>, <post>)

したがって、結果のタプルには常に 3つの要素が存在するため、出力の解凍は非常に柔軟になります。


-2
df.columnname[1].split('.', 1)

これにより、最初に出現する「。」でデータが分割されます。文字列またはデータフレーム列の値。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.