我正在尝试使用Python代码和正则表达式从Python代码文件中的新行开始删除注释。例如,对于此输入:
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)
由于某种原因,我得到的输出与输入相同。
答案 0 :(得分:0)
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)
答案 1 :(得分:0)
使用\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)