2013-03-27 1 views
2

Как разделить двойные пробелы и оставить новые строки? Можно ли без re?Как разделить двойные пробелы и оставить новые строки? Python

Если у меня есть что-то вроде этого:

string = ' foo\nbar spam' 

И мне нужно получить:

'foo\nbar spam' 

' '.join(string.split()) удаляет все пробелы, включая новые линии:

>>> ' '.join(string.split()) 
'foo bar spam' 

' '.join(string.split(' ')) ничего не делать.

+1

'strip' удаляет пробелы в начале и в конце строки, а не внутри строки. – I159

+2

Какой результат вы ожидаете для '' (3 пробела) foo \ nbar (6 пробелов) spam'? – jamylak

+0

@jamylak, только один, во всяком случае только один. – I159

ответ

7
>>> text = ' foo\nbar  spam' 
>>> '\n'.join(' '.join(line.split()) for line in text.split('\n')) 
'foo\nbar spam' 

Это разбивает его на линии. Затем он разбивает каждую строку пробелами и присоединяется к ней с одиночными пробелами. Затем он присоединяется к линиям.

2

полосы или lstrip функции могут быть использованы:

line = ' foo\nbar spam' 
while ' ' in line: 
    line = line.replace(' ', ' ') 
line = line.strip(' ') 
+1

Это не работает в середине – jamylak

+0

@jamylak изменен, пропущен пункт о едином пространстве внутри, хороший catch-thanx –

+0

Хорошо, это рабочее решение сейчас – jamylak

1
text = [' '.join(i.split()) for i in text.split('\n') if not i.isspace()] 
text = '\n'.join(text)