去除单个换行但保留多个换行的最佳方法
怎样用最“Python风格”的方法来去掉字符串中的单个换行符,但保留多个换行符呢?
比如说,
"foo\n\nbar\none\n\rtwo\rthree\n\n\nhello"
想要变成
"foo\n\nbar one two three\n\n\nhello"
我在想可以用splitlines()方法,然后把空行替换成"\n"
,最后再把所有内容拼接回去,但我觉得可能还有更好更简单的方法。也许可以用正则表达式?
1 个回答
5
>>> re.sub('(?<![\r\n])(\r?\n|\n?\r)(?![\r\n])', ' ', s)
'foo\n\nbar one two three\n\n\nhello'
这个内容是在寻找 \r?\n
或 \n?\r
,并使用了前瞻和后顾的方式来确保在这两边没有换行符。
顺便提一下,现实中有三种常见的行结束符:
\n
在 Linux、Mac OS X 和其他类 Unix 系统上使用\r\n
在 Windows 系统和 HTTP 协议中使用\r
在 Mac OS 9 及更早版本中使用
前两种是最常见的。如果你只想考虑这三种情况,可以这样做:
>>> re.sub('(?<![\r\n])(\r?\n|\r)(?![\r\n])', ' ', s)
'foo\n\nbar one two three\n\n\nhello'
当然,如果你不在乎 Mac 的行结束符(因为这种情况很少见),可以去掉 |\r
。