Ik probeer deze string in python te splitsen: 2.7.0_bf4fda703454
Ik wil die tekenreeks op het onderstrepingsteken _
splitsen zodat ik de waarde aan de linkerkant kan gebruiken.
Antwoord 1, autoriteit 100%
"2.7.0_bf4fda703454".split("_")
geeft een lijst met strings:
In [1]: "2.7.0_bf4fda703454".split("_")
Out[1]: ['2.7.0', 'bf4fda703454']
Hiermee wordt de tekenreeks gesplitst bij elkonderstrepingsteken. Als je wilt dat het stopt na de eerste splitsing, gebruik dan "2.7.0_bf4fda703454".split("_", 1)
.
Als je zeker weet dat de tekenreeks een onderstrepingsteken bevat, kun je de LHS en RHS zelfs uitpakken in afzonderlijke variabelen:
In [8]: lhs, rhs = "2.7.0_bf4fda703454".split("_", 1)
In [9]: lhs
Out[9]: '2.7.0'
In [10]: rhs
Out[10]: 'bf4fda703454'
Een alternatief is het gebruik van partition()
. Het gebruik is vergelijkbaar met het laatste voorbeeld, behalve dat het drie componenten retourneert in plaats van twee. Het belangrijkste voordeel is dat deze methode niet faalt als de string het scheidingsteken niet bevat.
Antwoord 2, autoriteit 59%
Python string parsing walkthrough
Splits een tekenreeks op spatie, krijg een lijst, toon het type, print het uit:
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?']
Als je twee scheidingstekens naast elkaar hebt, wordt uitgegaan van een lege tekenreeks:
el@apollo:~/foo$ python
>>> mystring = "its so fluffy im gonna DIE!!!"
>>> print mystring.split(" ")
['its', '', 'so', '', '', 'fluffy', '', '', 'im', 'gonna', '', '', '', 'DIE!!!']
Spreek een tekenreeks op onderstrepingsteken en pak het 5e item in de lijst:
el@apollo:~/foo$ python
>>> mystring = "Time_to_fire_up_Kowalski's_Nuclear_reactor."
>>> mystring.split("_")[4]
"Kowalski's"
Meerdere spaties samenvouwen tot één
el@apollo:~/foo$ python
>>> mystring = 'collapse these spaces'
>>> mycollapsedstring = ' '.join(mystring.split())
>>> print mycollapsedstring.split(' ')
['collapse', 'these', 'spaces']
Als je geen parameter doorgeeft aan de splitsingsmethode van Python, in de documentatie staat: ” reeksen opeenvolgende witruimten worden beschouwd als een enkel scheidingsteken en het resultaat bevat geen lege tekenreeksen aan het begin of einde als de tekenreeks een voorloop- of volgspatie heeft”.
Houd je hoed vast, jongens, ontleden op een reguliere expressie:
el@apollo:~/foo$ python
>>> mystring = 'zzzzzzabczzzzzzdefzzzzzzzzzghizzzzzzzzzzzz'
>>> import re
>>> mylist = re.split("[a-m]+", mystring)
>>> print mylist
['zzzzzz', 'zzzzzz', 'zzzzzzzzz', 'zzzzzzzzzzzz']
De reguliere expressie “[a-m]+” betekent dat de kleine letters a
tot en met m
die een of meer keren voorkomen als scheidingsteken worden gebruikt. re
is een bibliotheek die moet worden geïmporteerd.
Of als je de items één voor één wilt eten:
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
Antwoord 3, autoriteit 13%
Als het altijd een gelijkmatige LHS/RHS-splitsing zal zijn, kun je ook de partition
-methode gebruiken die in strings is ingebouwd. Het retourneert een 3-tupel als (LHS, separator, RHS)
als het separator is gevonden, en (original_string, '', '')
als het separator dat niet was aanwezig:
>>> "2.7.0_bf4fda703454".partition('_')
('2.7.0', '_', 'bf4fda703454')
>>> "shazam".partition("_")
('shazam', '', '')