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"
Eichel
quelle

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]
Ignacio Vazquez-Abrams
quelle
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'
utdemir
quelle
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.

Alex
quelle
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.

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

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

Himanshu Arora
quelle