【问题标题】:Delete comments in text file删除文本文件中的注释
【发布时间】:2016-02-02 16:47:56
【问题描述】:

我正在尝试使用 Python 代码和正则表达式从 Python 代码文件中的新行开始删除 cmets。例如,对于这个输入:

first line

#description

hello my friend

我想得到这个输出:

first line
hello my friend

很遗憾,这段代码由于某种原因无法正常工作:

with open(input_file,"r+") as f:
string = re.sub(re.compile(r'\n#.*'),"",f.read()))
f.seek(0)
f.write(string)

由于某种原因,我得到的输出与输入相同。

【问题讨论】:

  • 一方面,它的缩进不正确...您是否尝试过将其拆分为更小的步骤并测试每个步骤?
  • 我不认为你没有逐行比较。尝试多行匹配:re.compile('^#.*', re.MULTILINE)。
  • 在修复了几个语法错误后,我发现您的程序完全按预期运行。请提供一个简短、完整、否则正确的程序来演示该错误。请参阅stackoverflow.com/help/mcve 了解更多信息。

标签: python regex comments


【解决方案1】:

1) 除非您保存结果,否则没有理由调用re.compile。您始终可以只使用正则表达式文本。

2) 如果替换文本比原始文本短,寻找文件开头并在那里写入可能会给您带来问题。重新打开文件并写入数据更容易。

以下是我将如何修复您的程序:

import re
input_file = 'in.txt'
with open(input_file,"r") as f:
    data = f.read()

data = re.sub(r'\n#.*', "", data)

with open(input_file, "w") as f:
    f.write(data)

【讨论】:

    【解决方案2】:

    以\n开头的正则表达式似乎不正确,我认为您不需要在这里使用re.compile。

    除此之外,您还必须使用标志re.M 进行多行搜索

    这将删除所有以# 开头的行和空行。

    with open(input_file, "r+") as f:
        text = f.read()
        string = re.sub('^(#.*)|(\s*)$', '', text, flags=re.M)
        f.write(string)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-14
      • 1970-01-01
      • 2015-05-11
      • 1970-01-01
      • 1970-01-01
      • 2018-04-07
      • 1970-01-01
      相关资源
      最近更新 更多