2012-10-12 10 views
18

Chciałbym podzielić ciąg tylko wtedy, gdy są co najmniej dwa lub więcej białych znaków.python podzielił ciąg znaków na co najmniej 2 białe znaki

Na przykład

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

Wyniki:

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

bym to wyglądać tak:

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

Odpowiedz

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

Nie trzeba używać wyrażeń regularnych, wystarczy wykonać 'str.split ('')'. Pamiętaj również, że używanie zmiennej str jako nazwy zmiennej jest złe ze względu na wbudowany typ str. – Wessie

+3

@Wessie: 'text.split ('')' wytworzy wiele pustych łańcuchów, ponieważ liczba spacji jest często większa niż 2. – unutbu

+0

'str.split ('')' daje w wyniku '['10DEUTSCH', '' , '', '', 'GGS Neue Heide 25-27', '', 'Wahn-Heide', '-1', '', '', '-1'] '. Regex to dobry sposób na podział na "2 ** lub więcej ** białych". – dokkaebi

7

Jak już wskazano, str nie jest dobre imię dla twojego napisu, s O użyciu words zamiast:

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

The .split (”„) - z dwóch pomieszczeń - daje listę, która zawiera pustych strun i przedmiotów z wleczonego/wiodących spacji. Zrozumienie listy iteruje na tej liście, zachowuje wszystkie niepuste elementy (if s) i .strip() dba o wszystkie wiodące/końcowe spacje.

+1

Myślę, że musielibyśmy też wrzucić '.strip()', aby zapobiec '" -1 "' (zobacz @ Rozwiązanie Ashwiniego) – 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

Możesz użyć 'filtru (None, ...)' lub 'filter (bool, ...) 'zamiast' lambda'. – DSM

+0

Funkcje 'map' i' filter' nie są preferowane. Spróbuj użyć rozumienia listy. –

Powiązane problemy