如何去掉双空格并保留换行符?Python

5

如何去除双空格并保留换行符?不使用 re,是否仍然可能实现?

如果我有类似这样的内容:

string = '   foo\nbar  spam'

我需要获取:

'foo\nbar spam'

' '.join(string.split())可以删除所有空白字符,包括换行符:

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

' '.join(string.split(' ')) 不会做任何事情。


1
strip函数用于移除字符串开头和结尾的空格,但不会移除字符串内部的空格。 - I159
2
你期望 '(3 spaces)foo\nbar(6 spaces)spam 的输出是什么? - jamylak
@jamylak,只有一个,无论如何只有一个。 - I159
3个回答

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

这将把它分成几行。然后按空格拆分每一行,并用单个空格重新连接。最后重新连接这些行。


2

可以使用strip或lstrip函数:

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

@jamylak 修改了,关于单个空格的问题错过了重点,很好的发现 - 谢谢 - Artsiom Rudzenka
实际上,看起来这也更快。 - jamylak

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接