2012-10-12 265 views
18

Me gustaría dividir una cadena solo cuando hay al menos dos o más espacios en blanco.python dividir una cadena con al menos 2 espacios en blanco

Por ejemplo

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

Resultados:

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

me gustaría que se vea como esto:

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

Respuesta

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

No necesita usar regex simplemente haga 'str.split ('')'. También importa que uses str como nombre de variable es algo malo debido al tipo str incorporado. – Wessie

+3

@Wessie: 'text.split ('')' producirá muchas cadenas vacías porque la cantidad de espacios suele ser mayor que 2. – unutbu

+0

'str.split ('')' da como resultado '['10DEUTSCH', '' , '', '', 'GGS Neue Heide 25-27', '', 'Wahn-Heide', '-1', '', '', '-1'] '. Regex es una buena manera de dividir en "2 ** o más ** espacios en blanco". – dokkaebi

7

Como se ha señalado, str no es un buen nombre para su cuerda, s o usando words lugar:

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

El .split (' ') - con dos plazas - le dará una lista que incluye cadenas vacías, y los objetos de arrastre/espacios iniciales. La lista de comprensión itera a través de esa lista, guarda los elementos que no estén en blanco (if s) y .strip() se encarga de cualquier espacio en blanco inicial/posterior.

+1

Creo que también necesitarías lanzar un '.strip()' para evitar '" -1 "' (ver la solución de @ Ashwini) – 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

Puedes usar 'filter (None, ...)' o 'filter (bool, ...) 'en lugar de la' lambda'. – DSM

+0

'map' y' filter' no son preferidas. Intenta usar la lista de comprensión. –

Cuestiones relacionadas