保存不在正则表达式python中的行
我的实际代码,正在写入一个新文件,即来自正则表达式的数据。 最后,我有一个新文件,其中有一些孤立的行保存不在正则表达式python中的行,python,regex,Python,Regex,我的实际代码,正在写入一个新文件,即来自正则表达式的数据。 最后,我有一个新文件,其中有一些孤立的行 contract_data = [] with open('output/'+contract, "r") as f: contents = f.read() m = re.search("PAS_BEGIN_"+ contract_id +"([\S\s]*)PAS_END_"+ contract_id, contents) if m: contr
contract_data = []
with open('output/'+contract, "r") as f:
contents = f.read()
m = re.search("PAS_BEGIN_"+ contract_id +"([\S\s]*)PAS_END_"+ contract_id, contents)
if m:
contract_data.append(m.group())
with open('output/'+contract, 'w') as outfile:
for line in contract_data:
outfile.write(line)
我想做的是从文件中获取所有内容,减去从正则表达式中捕获的内容
我读过avec reverse regex,但我想知道是否有一种更具python风格的方法可以做到这一点
谢谢你的帮助
关于您的代码有几处错误-首先,如果您想逐行区分,您应该逐行阅读和处理您的文件。此外,通常在关闭文件进行读取之前先打开文件进行写入不是一个好主意。最后,您可以使用
re.sub()
删除与其匹配的部分,而不是反转模式
with open('output/'+contract, "r") as f:
contents = f.read().splitlines()
with open('output/'+contract, 'w') as outfile:
for line in contents:
if not "PAS_BEGIN_"+ contract_id +"([\S\s]*)PAS_END_"+ contract_id in line:
outfile.write(line)
因此:
你想要正则表达式中没有捕捉到的所有内容吗?完全是的,我尝试过负正则表达式,但不起作用。你能用你与正则表达式匹配的内容编辑你的问题吗。那么,基本上你需要什么样的输入和输出?@vieroli-那么你的正则表达式是错误的。上面的代码只写与正则表达式不匹配的行。另外,为什么要使用
[\S\S]
字符类,请改用点(
),因为它也会匹配所有内容。@vieroli-更清楚的是,请查看上面的更新。虽然此代码可能会回答问题,提供关于如何和/或为什么解决问题的附加上下文将提高答案的长期价值。
with open("output/" + contract, "r") as f: # open for reading
contract_data = re.sub("PAS_BEGIN_" + contract_id + r"([\S\s]*)PAS_END_" + contract_id,
"", f.read())
with open("output/" + contract, "w") as f: # open for writing
f.write(contract_data)