Aufteilung beim ersten Auftreten


309

Was wäre der beste Weg, um eine Zeichenfolge beim ersten Auftreten eines Trennzeichens zu teilen?

Zum Beispiel:

"123mango abcd mango kiwi peach"

Aufteilen auf den ersten mango, um zu erhalten:

"abcd mango kiwi peach"

Antworten:


522

Aus den Dokumenten :

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

Gibt eine Liste der Wörter in der Zeichenfolge zurück, wobei sep als Trennzeichenfolge verwendet wird. Wenn maxsplit angegeben ist, werden höchstens maxsplit- Teilungen durchgeführt (daher enthält die Liste höchstens maxsplit+1Elemente).

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

Hinweis: Wenn nach Erreichen der maxsplitAnzahl weitere Teilungen durchgeführt werden können , enthält das letzte Element in der Liste den Rest der Zeichenfolge (einschließlich aller sepZeichen / Zeichenfolgen).
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
@Schweiz: Na und. Die Technik ist immer noch die gleiche.
Ignacio Vazquez-Abrams

6
@Ignacio: Ich weise nur darauf hin. Kein Grund, eine teilweise korrekte Antwort anstelle einer vollständig korrekten zu haben.
Schweizer

Nimmt technisch das richtige Trennzeichen an. Der 'erste' ist der [1] Index. Derjenige, auf den wir uns alle beziehen, wäre natürlich der nullte Index. : D Semantik.
Izaac Corbett

27

Für mich ist der bessere Ansatz:

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

... denn wenn das Auftreten geschieht nicht in der Zeichenfolge werden Sie bekommen " IndexError: list index out of range".

Daher -1wird kein Schaden verursacht, da die Anzahl der Vorkommen bereits auf eins gesetzt ist.


1
Wie bereits geschrieben, gibt es die Anzahl der Vorkommen, in denen die Methode split () angewendet wird. Die Methode findet und wendet nur die erste Mango-Zeichenfolge an.
Alex

2

Sie können auch verwenden 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'

Der Vorteil der Verwendung str.partitionist, dass immer ein Tupel in der folgenden Form zurückgegeben wird:

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

Dies macht das Auspacken der Ausgabe sehr flexibel, da das resultierende Tupel immer 3 Elemente enthält.


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

Dadurch werden Daten beim ersten Auftreten von '.' Geteilt. im Zeichenfolgen- oder Datenrahmenspaltenwert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.