Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
保存不在正则表达式python中的行_Python_Regex - Fatal编程技术网

保存不在正则表达式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)