2012-10-12 16 views
18

Bir dizeyi en az iki veya daha fazla boşluk olduğunda bölmek istiyorum. Örneğinpython en az 2 beyaz boşluklu bir dize ayırdı

str = '10DEUTSCH  GGS Neue Heide 25-27  Wahn-Heide -1  -1' 
print str.split() 

Sonuçlar:

['10DEUTSCH', 'GGS', 'Neue', 'Heide', '25-27', 'Wahn-Heide', '-1', '-1'] 

bunu istiyorum şöyle görünecek şekilde:

['10DEUTSCH', 'GGS Neue Heide 25-27', 'Wahn-Heide', '-1', '-1'] 
işaret edildiği gibi

cevap

35
In [4]: import re  
In [5]: text = '10DEUTSCH  GGS Neue Heide 25-27  Wahn-Heide -1  -1' 
In [7]: re.split(r'\s{2,}', text) 
Out[7]: ['10DEUTSCH', 'GGS Neue Heide 25-27', 'Wahn-Heide', '-1', '-1'] 
+1

Sadece regex kullanmaya gerek yok str.split ('') '. Ayrıca str'yi değişken ad olarak kullandığınızı düşünün, yerleşik str türü nedeniyle kötü bir şeydir. – Wessie

+3

@Wessie: 'text.split ('')' çok sayıda boş dizge üretecektir çünkü boş alan sayısı genellikle 2'den büyüktür. – unutbu

+0

'str.split ('')', '[10DEUTSCH', '' sonucunu verir. , '', '', 'GGS Neue Heide 25-27', '', 'Wahn-Heide', '-1', '', '', '-1'] '. Regex, "2 ** veya daha fazla ** whitespaces" üzerinde bölmek için iyi bir yoldur. – dokkaebi

7

, str değil dize için iyi bir isim, s yerine words kullanarak o: - İki boşluklarla -

output = [s.strip() for s in words.split(' ') if s] 

.split (' ') size sondaki/önde bir boşlukla boş dizeleri ve öğeleri içeren bir liste verecektir. Liste anlaşması bu listede yinelenir, boş olmayan öğeleri (if s) tutar ve .strip() herhangi bir lider/sondaki boşlukla ilgilenir.

+1

Ayrıca "-1" (bkz. @ Ashwini'nin çözümüne bakın) 'ı önlemek için orada bir '.strip()' a atmanız gerektiğini düşünmektesiniz – DSM

4
In [30]: strs='10DEUTSCH  GGS Neue Heide 25-27  Wahn-Heide -1  -1' 

In [38]: filter(None, strs.split(" ")) 

Out[38]: ['10DEUTSCH', 'GGS Neue Heide 25-27', ' Wahn-Heide', ' -1', '-1'] 

In [32]: map(str.strip, filter(None, strs.split(" "))) 

Out[32]: ['10DEUTSCH', 'GGS Neue Heide 25-27', 'Wahn-Heide', '-1', '-1'] 
+1

'filter (None, ...)' veya 'filter (bool, ...) 'yerine“ lambda ”. – DSM

+0

'map' ve' filter' işlevleri tercih edilmez. Liste kavramasını kullanmaya çalışın. –

İlgili konular