2
删除单个换行符但保留字符串中多个换行符的最好方法是什么?删除单个换行符但保留多个换行符的最佳方式
正如
"foo\n\nbar\none\n\rtwo\rthree\n\n\nhello"
变成
"foo\n\nbar one two three\n\n\nhello"
我想使用splitlines(),然后通过"\n"
更换空行,然后再返回串联的一切,但我怀疑有更好/更简单的方法。也许使用正则表达式?
删除单个换行符但保留字符串中多个换行符的最好方法是什么?删除单个换行符但保留多个换行符的最佳方式
正如
"foo\n\nbar\none\n\rtwo\rthree\n\n\nhello"
变成
"foo\n\nbar one two three\n\n\nhello"
我想使用splitlines(),然后通过"\n"
更换空行,然后再返回串联的一切,但我怀疑有更好/更简单的方法。也许使用正则表达式?
>>> 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'
和当然,摆脱|\r
的,如果你不关心Mac产品线的结局,这是罕见的。
谢谢,这看起来不错。但现在我正在阅读,我不认为寻找“\ r \ n”或甚至单个“\ r”是很有意义的。也许唯一明智的换行符是'\ n'和''\ n \ r''。是对的吗?如果是这样,你还可以为简单的情况提供正则表达式吗? –