将多个空行减少为单个(Python)

Maw*_*awg 6 python regex python-3.x

如何在每次出现时将文本文件中的多个空白行减少为一行?

我已将整个文件读入字符串,因为我想在行结尾处进行一些替换.

with open(sourceFileName, 'rt') as sourceFile:
    sourceFileContents = sourceFile.read()
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用

while '\n\n\n' in sourceFileContents:
    sourceFileContents = sourceFileContents.replace('\n\n\n', '\n\n')
Run Code Online (Sandbox Code Playgroud)

这也不是

sourceFileContents = re.sub('\n\n\n+', '\n\n', sourceFileContents)
Run Code Online (Sandbox Code Playgroud)

它很容易将它们全部剥离,但我想在每次遇到它们时将多个空行减少到一个空行.

我觉得我很亲密,但却无法让它发挥作用.

Mar*_*esa 13

这是一个范围,但也许某些行不是完全空白的(即它们只有空白字符,这些字符会出现空白).您可以尝试删除换行符之间的所有可能空格.

re.sub(r'(\n\s*)+\n+', '\n\n', sourceFileContents)
Run Code Online (Sandbox Code Playgroud)

编辑:意识到第二个'+'是多余的,因为\ s*将捕获第一个和最后一个之间的换行符.我们只是想确保最后一个字符肯定是换行符,因此我们不会从包含其他内容的行中删除前导空格.

re.sub(r'(\n\s*)+\n', '\n\n', sourceFileContents)
Run Code Online (Sandbox Code Playgroud)

编辑2

re.sub(r'\n\s*\n', '\n\n', sourceFileContents)
Run Code Online (Sandbox Code Playgroud)

应该是一个更简单的解决方案.我们真的只想抓住我们的两个锚定换行符之间的任何可能空间(包括中间换行符),这些换行符将构成单个空行并将其折叠为仅两个换行符.


Avi*_*Raj 6

您的代码对我有用。也许会有回程的机会\r

re.sub(r'[\r\n][\r\n]{2,}', '\n\n', sourceFileContents)
Run Code Online (Sandbox Code Playgroud)


Yev*_*yla 5

您可以只使用 str 方法 split 和 join :

text = "some text\n\n\n\nanother line\n\n"
print("\n".join(item for item in text.split('\n') if item))
Run Code Online (Sandbox Code Playgroud)