2012-10-12 9 views
18

Ich möchte eine Zeichenfolge nur dort teilen, wo es mindestens zwei oder mehr Leerzeichen gibt.Python Split eine Zeichenfolge mit mindestens 2 Leerzeichen

Zum Beispiel

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

Ergebnisse:

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

Ich mag es würde wie folgt aussehen:

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

Antwort

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

Keine Notwendigkeit, Regex zu verwenden, tun Sie einfach 'str.split ('')'. Bedenken Sie auch, dass Sie str als Variablennamen verwenden, ist eine schlechte Sache wegen des eingebauten Str-Typs. – Wessie

+3

@Wessie: 'text.split ('')' erzeugt viele leere Strings, da die Anzahl der Leerzeichen oft größer als 2 ist. – unutbu

+0

'str.split ('')' ergibt '[' 10DEUTSCH ',' ' , '', '', 'GGS Neue Heide 25-27', '', 'Wahn-Heide', '-1', '', '', '-1'] '. Regex ist eine gute Möglichkeit, um "2 ** oder mehr ** Whitespaces" zu teilen. – dokkaebi

7

Wie bereits ausgeführt wurde, str ist nicht ein guter Name für deine Saite, s o mit words statt:

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

Der .split (‘‚) - mit zwei Räumen - werden Sie eine Liste, die leeren Zeichenfolge enthält, und Elemente mit nachlauf/führende Leerzeichen. Das Listenverständnis durchläuft diese Liste, behält alle nicht leeren Elemente (if s) und .strip() kümmert sich um führende/nachfolgende Leerzeichen.

+1

Ich denke, Sie müssten auch ein '.strip()' da hineinwerfen, um '" -1 "' zu verhindern (siehe @ Ashwinis Lösung) – 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

Sie können 'filter (None, ...)' oder 'filter verwenden (bool, ...) 'anstatt der' Lambda'. – DSM

+0

'map' und' filter' Funktionen sind nicht bevorzugt. Versuchen Sie, Listenverständnis zu verwenden. –

Verwandte Themen