2014-03-26 59 views
2

刪除單個換行符但保留字符串中多個換行符的最好方法是什麼?刪除單個換行符但保留多個換行符的最佳方式

正如

"foo\n\nbar\none\n\rtwo\rthree\n\n\nhello"

變成

"foo\n\nbar one two three\n\n\nhello"

我想使用splitlines(),然後通過"\n"更換空行,然後再返回串聯的一切,但我懷疑有更好/更簡單的方法。也許使用正則表達式?

回答

3
>>> re.sub('(?<![\r\n])(\r?\n|\n?\r)(?![\r\n])', ' ', s) 
'foo\n\nbar one two three\n\n\nhello' 

這看起來爲\r?\n\n?\r並使用回顧後和向前斷言,以防止從那裏被在任一側上一個新行。

對於它的價值,有三種類型的行結束在野外發現:

  1. \n在Linux,Mac OS X和其他Unix系統
  2. \r\n在Windows,並在HTTP協議
  3. \r在Mac OS 9和早期

前兩個是目前最常見的。如果你想限制的可能性,只是這三個,你可以這樣做:

>>> re.sub('(?<![\r\n])(\r?\n|\r)(?![\r\n])', ' ', s) 
'foo\n\nbar one two three\n\n\nhello' 

和當然,擺脫|\r的,如果你不關心Mac產品線的結局,這是罕見的。

+0

謝謝,這看起來不錯。但現在我正在閱讀,我不認爲尋找「\ r \ n」或甚至單個「\ r」是很有意義的。也許唯一明智的換行符是'\ n'和''\ n \ r''。是對的嗎?如果是這樣,你還可以爲簡單的情況提供正則表達式嗎? –