删除单个换行符但保留多个换行符的最佳方法

时间:2014-03-26 01:33:37

标签: python newline

删除单个换行符但从字符串中保留多个换行符的最pythonic方法是什么?

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

变成

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

我正在考虑使用splitlines(),然后用"\n"替换空行,然后再将所有内容连接起来,但我怀疑有更好/更简单的方法。也许正在使用正则表达式?

1 个答案:

答案 0 :(得分: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并使用lookbehind和lookahead断言来防止在任何一方都出现换行符。

对于它的价值,在野外有三种类型的行结尾:

    Linux,Mac OS X和其他Unices上的
  1. \n
  2. Windows上的
  3. \r\n和HTTP协议
  4. Mac OS 9及更早版本
  5. \r
  6. 前两个是迄今为止最常见的。如果你想限制这三种可能性,你可以这样做:

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

    当然,如果你不关心Mac线的结尾,那就去掉|\r,这很少见。