python - 将多个空行减少为单个(Python 方式)

标签 python regex python-3.x

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

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

with open(sourceFileName, 'rt') as sourceFile:
    sourceFileContents = sourceFile.read()

这似乎不起作用
while '\n\n\n' in sourceFileContents:
    sourceFileContents = sourceFileContents.replace('\n\n\n', '\n\n')

这也没有
sourceFileContents = re.sub('\n\n\n+', '\n\n', sourceFileContents)

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

我觉得我很接近,但就是无法让它发挥作用。

最佳答案

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

re.sub(r'(\n\s*)+\n+', '\n\n', sourceFileContents)

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

编辑 2
re.sub(r'\n\s*\n', '\n\n', sourceFileContents)

应该是一个更简单的解决方案。我们真的只想在我们的两个 anchor 换行符之间捕获任何可能的空间(包括中间换行符),这将使单个空白行并将其折叠为两个换行符。

关于python - 将多个空行减少为单个(Python 方式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28901452/

相关文章:

python - 如何在 Python 中创建对象集合代理?

python - 使用不平衡学习库的特征重要性

python - VSCode 中的交互式 Jupyter 小部件与 ms-python 2018.10.1

php - 如何使用 PHP 的 preg_replace 函数将 Unicode 代码点转换为实际字符/HTML 实体?

python - 使用 python 的 os.walk 来搜索特定的目录名称?

mysql - Django - 如何从我想要从中获取对象的表中没有外键的表中获取值?

python - 如何使 Python 生成器尽可能快?

python - 使用 IMAP4 和 python 从 GMail 获取加星标的邮件

python - 如何使用 numpy 提高 python 代码性能

C# 正则表达式组麻烦