删除Python中的单个和多个换行符,只留下Double换行符

时间:2014-12-26 12:00:36

标签: python regex string

我想要做的是删除一次或两次以上发生的所有换行,只留下 双线。

我想:"\n\n" 但不是"\n""\n\n\n""\n\n\n\n"等等。

是否有命令告诉python“如果\ n出现一次或两次以上......”?

3 个答案:

答案 0 :(得分:7)

>>> import re
>>> text = '\n \n\n \n\n\n'
>>> re.sub(r'(?<!\n)\n(?!\n)|\n{3,}', '', text)
' \n\n '

答案 1 :(得分:1)

((?<!\n)\n{2}(?!\n))|\n+

试试这个。替换为\1。请参阅演示。

https://regex101.com/r/dU7oN5/22

import re
re.sub(r"((?<!\n)\n{2}(?!\n))|\n+",r"\1",test_str)

((?<!\n)\n{2}(?!\n)) ==&GT;仅捕获2 \n。 Lookbehind和lookahead确保它们正好是2。

\n+ ==&gt;捕捉其余的

答案 2 :(得分:1)

为了完整起见,这里是一个不使用正则表达式(re)的递归解决方案:

#!/usr/bin/env python

test = "this\n\nis\n\none\n\nline\nthat's not \nthis is not either\n\n\nok\n\n :)"

def count_replace(lines, count=0, target=2, char='\n'):
    print count
    if lines:
        if lines[0] == char:
            return count_replace(lines[1:], count + 1, target, char)
        if count == target:
            return lines[0] + count_replace(lines[1:], 0, target, char)
        return char * count + lines[0] + count_replace(lines[1:], 0, target, char)
    if count == target:
        return ''
    return count * char
print count_replace(test)