如何使用Python修改文本文件

时间:2014-05-10 11:10:35

标签: python regex

我有以下文本文件:

  
      
  1. 很难向双关语者解释双关语,因为他们总是从字面上理解。

  2.   
  3. 我曾经认为大脑是最重要的器官。然后我想,看看有什么告诉我的。

  4.   

我使用以下脚本来删除编号和换行符:

import re
with open('jokes.txt', 'r+') as original_file:
    modfile = original_file.read()
    modfile = re.sub("\d+\. ", "", modfile)
    modfile = re.sub("\n", "", modfile)
    original_file.seek(0)
    original_file.truncate()
    original_file.write(modfile)

运行脚本后,我的文本文件如下:

  

很难向双关语者解释双关语,因为他们总是采取行动   事实上。我曾经认为大脑是最重要的   器官。然后我想,看看有什么告诉我的。

我希望文件是:

  

很难向双关语者解释双关语,因为他们总是从字面上理解事物   我曾经认为大脑是最重要的器官。然后我想,看看有什么告诉我的。

如何在不修改所有行的情况下删除新行?

1 个答案:

答案 0 :(得分:2)

您可以使用单个替换,使用以下正则表达式:

re.sub(r"\d+\. |(?<!^)\n", "", modfile, flags=re.MULTILINE)

(?<!^)\n将匹配换行符,除非它位于一行的开头。标记re.MULTILINE使^与每个行的开头匹配。

regex101 demo

在代码中:

import re
with open('jokes.txt', 'r+') as original_file:
    modfile = original_file.read()
    midfile = re.sub(r"\d+\. |(?<!^)\n", "", modfile, flags=re.MULTILINE)
    original_file.seek(0)
    original_file.truncate()
    original_file.write(modfile)

如果您愿意,也可以使用负向前瞻而不是后瞻:

r"\d+\. |\n(?!\n)"