Python'da bir dizeyi nasıl bölebilir ve ayrıştırabilirim?


107

Bu dizeyi python'a bölmeye çalışıyorum: 2.7.0_bf4fda703454

_Sol taraftaki değeri kullanabilmek için bu dizeyi alt çizgi üzerinde bölmek istiyorum .


partitionDizelerin yöntemini okuyun ve ardından sorunuzu güncelleyin.
S.Lott

Yanıtlar:


141

"2.7.0_bf4fda703454".split("_") dizelerin bir listesini verir:

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

Bu, dizeyi her alt çizgide böler . İlk bölünmeden sonra durmasını istiyorsanız, kullanın "2.7.0_bf4fda703454".split("_", 1).

Dizenin alt çizgi içerdiğini biliyorsanız, LHS ve RHS'yi ayrı değişkenlere ayırabilirsiniz:

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

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

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

Bir alternatif kullanmaktır partition(). Kullanım, iki yerine üç bileşen döndürmesi dışında son örneğe benzer. Temel avantajı, dizge ayırıcı içermiyorsa bu yöntemin başarısız olmamasıdır.


80

Python dizesi çözümleme kılavuzu

Bir dizgeyi uzaya bölün, bir liste alın, türünü gösterin, yazdırın:

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?']

Yan yana iki sınırlayıcınız varsa boş dize varsayılır:

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

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

Alt çizgiye bir dize bölün ve listedeki 5. öğeyi alın:

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

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

Birden çok boşluğu tek bir alana daraltın

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

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

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

Python'un bölme yöntemine hiçbir parametre iletmezseniz , dokümantasyon şunu belirtir : "ardışık beyaz boşluklar tek bir ayırıcı olarak kabul edilir ve eğer dizginin başında veya sonunda boşluk varsa, sonuç başında veya sonunda boş dizeler içermez".

Şapkalarınıza tutun çocuklar, düzenli bir ifadeyle ayrıştırın:

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

"[Am] +" normal ifadesi, bir veya daha fazla kez ageçen küçük harflerin msınırlayıcı olarak eşleştirildiği anlamına gelir . reiçe aktarılacak bir kitaplıktır.

Veya öğeleri birer birer parçalamak istiyorsanız:

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

Her zaman eşit bir LHS / RHS ayrımı olacaksa, partitiondizelerde yerleşik olan yöntemi de kullanabilirsiniz . (LHS, separator, RHS)Ayırıcı bulunuyormuş gibi bir 3 demet döndürür ve ayırıcı (original_string, '', '')yoksa:

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

>>> "shazam".partition("_")
('shazam', '', '')
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.