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)
应该是一个更简单的解决方案.我们真的只想抓住我们的两个锚定换行符之间的任何可能空间(包括中间换行符),这些换行符将构成单个空行并将其折叠为仅两个换行符.
您的代码对我有用。也许会有回程的机会\r。
re.sub(r'[\r\n][\r\n]{2,}', '\n\n', sourceFileContents)
Run Code Online (Sandbox Code Playgroud)
您可以只使用 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)
| 归档时间: |
|
| 查看次数: |
5584 次 |
| 最近记录: |