Wie kann ich einen String in Python teilen und analysieren?


106

Ich versuche, diesen String in Python zu teilen: 2.7.0_bf4fda703454

Ich möchte diese Zeichenfolge auf dem Unterstrich teilen, _damit ich den Wert auf der linken Seite verwenden kann.


Informieren Sie sich über die partitionMethode der Zeichenfolgen und aktualisieren Sie dann Ihre Frage.
S.Lott

Antworten:


139

"2.7.0_bf4fda703454".split("_") gibt eine Liste von Zeichenfolgen:

In [1]: "2.7.0_bf4fda703454".split("_")
Out[1]: ['2.7.0', 'bf4fda703454']

Dadurch wird die Zeichenfolge bei jedem Unterstrich aufgeteilt. Wenn Sie möchten, dass es nach dem ersten Split stoppt, verwenden Sie"2.7.0_bf4fda703454".split("_", 1) .

Wenn Sie sicher sind, dass die Zeichenfolge einen Unterstrich enthält, können Sie LHS und RHS sogar in separate Variablen entpacken:

In [8]: lhs, rhs = "2.7.0_bf4fda703454".split("_", 1)

In [9]: lhs
Out[9]: '2.7.0'

In [10]: rhs
Out[10]: 'bf4fda703454'

Eine Alternative ist zu verwenden partition(). Die Verwendung ähnelt dem letzten Beispiel, außer dass drei statt zwei Komponenten zurückgegeben werden. Der Hauptvorteil besteht darin, dass diese Methode nicht fehlschlägt, wenn die Zeichenfolge kein Trennzeichen enthält.


80

Exemplarische Vorgehensweise zum Parsen von Python-Zeichenfolgen

Teilen Sie eine Zeichenfolge auf Leerzeichen, rufen Sie eine Liste ab, zeigen Sie ihren Typ an und drucken Sie sie aus:

el@apollo:~/foo$ python
>>> mystring = "What does the fox say?"

>>> mylist = mystring.split(" ")

>>> print type(mylist)
<type 'list'>

>>> print mylist
['What', 'does', 'the', 'fox', 'say?']

Wenn Sie zwei Trennzeichen nebeneinander haben, wird eine leere Zeichenfolge angenommen:

el@apollo:~/foo$ python
>>> mystring = "its  so   fluffy   im gonna    DIE!!!"

>>> print mystring.split(" ")
['its', '', 'so', '', '', 'fluffy', '', '', 'im', 'gonna', '', '', '', 'DIE!!!']

Teilen Sie eine Zeichenfolge auf Unterstrich und greifen Sie zum fünften Element in der Liste:

el@apollo:~/foo$ python
>>> mystring = "Time_to_fire_up_Kowalski's_Nuclear_reactor."

>>> mystring.split("_")[4]
"Kowalski's"

Reduzieren Sie mehrere Felder zu einem

el@apollo:~/foo$ python
>>> mystring = 'collapse    these       spaces'

>>> mycollapsedstring = ' '.join(mystring.split())

>>> print mycollapsedstring.split(' ')
['collapse', 'these', 'spaces']

Wenn Sie keinen Parameter an die Split-Methode von Python übergeben, heißt es in der Dokumentation : "Läufe aufeinanderfolgender Leerzeichen werden als einzelnes Trennzeichen betrachtet, und das Ergebnis enthält am Anfang oder Ende keine leeren Zeichenfolgen, wenn die Zeichenfolge führende oder nachfolgende Leerzeichen enthält."

Halten Sie Ihre Hüte fest, Jungs, analysieren Sie einen regulären Ausdruck:

el@apollo:~/foo$ python
>>> mystring = 'zzzzzzabczzzzzzdefzzzzzzzzzghizzzzzzzzzzzz'
>>> import re
>>> mylist = re.split("[a-m]+", mystring)
>>> print mylist
['zzzzzz', 'zzzzzz', 'zzzzzzzzz', 'zzzzzzzzzzzz']

Der reguläre Ausdruck „[AM] +“ bedeutet die Kleinbuchstaben adurch mdie auftreten , ein oder mehrere Male als ein Trennzeichen abgestimmt sind. reist eine zu importierende Bibliothek.

Oder wenn Sie die Gegenstände einzeln zerlegen möchten:

el@apollo:~/foo$ python
>>> mystring = "theres coffee in that nebula"

>>> mytuple = mystring.partition(" ")

>>> print type(mytuple)
<type 'tuple'>

>>> print mytuple
('theres', ' ', 'coffee in that nebula')

>>> print mytuple[0]
theres

>>> print mytuple[2]
coffee in that nebula

18

Wenn es sich immer um eine gleichmäßige LHS / RHS-Aufteilung handelt, können Sie auch partitiondie in Zeichenfolgen integrierte Methode verwenden. Es wird ein 3-Tupel zurückgegeben, als (LHS, separator, RHS)ob das Trennzeichen gefunden würde und (original_string, '', '')wenn das Trennzeichen nicht vorhanden wäre:

>>> "2.7.0_bf4fda703454".partition('_')
('2.7.0', '_', 'bf4fda703454')

>>> "shazam".partition("_")
('shazam', '', '')
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.