我正在尝试对文本文件执行某种格式清除。我想用双新行替换所有三(或更多)新行,并用单新行替换所有双新行。 首先,我像这样打开文件:
text = ""
with open(filename) as fp:
for cnt, line in enumerate(fp):
text += line
但替换如下新行:text = re.sub(r'\n\n', '\n', text).strip()
或类似text = text.replace("\n\n", "\n")
用单行替换所有(多行)新行。
我在做什么错?
感谢您的帮助和解释。
编辑
我想实现这样的目标:
text text text text text text text text text text text text text text text
text text text text text text text text text text text text text text text
text text text text text text text text text text text text text text text
text text text text text text text text text text text text text text text
text text text text text text text text text text text text text text text
text text text text text text text text text text text text text text text
成为:
text text text text text text text text text text text text text text text
text text text text text text text text text text text text text text text
text text text text text text text text text text text text text text text
text text text text text text text text text text text text text text text
text text text text text text text text text text text text text text text
text text text text text text text text text text text text text text text
答案 0 :(得分:1)
您可以使用
with open(filename, 'r') as fp:
print( re.sub(r'(\n{3,})|\n\n', lambda x: "\n\n" if x.group(1) else "\n", fp.read()) )
注释
fp.read()
来获取它,而不是逐行读取(\n{3,})|\n\n
正则表达式匹配并将3个或更多换行符捕获到组1中,或匹配两个换行符。如果第1组匹配,则替换为双换行符,否则为单换行符。由于这是有条件的替换,因此可调用(此处为lamda表达式)用作替换参数。