删除单个换行符但从字符串中保留多个换行符的最pythonic方法是什么?
在
中 "foo\n\nbar\none\n\rtwo\rthree\n\n\nhello"
变成
"foo\n\nbar one two three\n\n\nhello"
我正在考虑使用splitlines(),然后用"\n"
替换空行,然后再将所有内容连接起来,但我怀疑有更好/更简单的方法。也许正在使用正则表达式?
答案 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断言来防止在任何一方都出现换行符。
对于它的价值,在野外有三种类型的行结尾:
\n
\r\n
和HTTP协议\r
前两个是迄今为止最常见的。如果你想限制这三种可能性,你可以这样做:
>>> re.sub('(?<![\r\n])(\r?\n|\r)(?![\r\n])', ' ', s)
'foo\n\nbar one two three\n\n\nhello'
当然,如果你不关心Mac线的结尾,那就去掉|\r
,这很少见。