我想要做的是删除一次或两次以上发生的所有换行,只留下 双线。
我想:"\n\n"
但不是"\n"
,"\n\n\n"
,"\n\n\n\n"
等等。
是否有命令告诉python“如果\ n出现一次或两次以上......”?
答案 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)