<p>我正在解析一个量子化学软件的大输出(25mb<a href="https://gist.github.com/HenriqueCSJ/77a2a91e1c4652b3e0def2521f4450c5" rel="nofollow noreferrer">provided here</a>)。软件使用两种方法执行计算:CASSCF和NEVPT2。每种方法执行相同的计算,导致不同的结果。实际上,我已经将脚本设置为针对不同的配置多次运行计算,因此我最终有了如下组织:</p>
<pre><code>JOB 1
CASSCF RESULTS
***
Lots of text
***
end
NEVPT2 RESULTS
***
Lots of text
***
end
JOB 2
CASSCF RESULTS
***
Lots of text
***
end
NEVPT2 RESULTS
***
Lots of text
***
end
………………
JOB 31
CASSCF RESULTS
***
Lots of text
***
end
NEVPT2 RESULTS
***
Lots of text
***
end
</code></pre>
<p>我只想要NEVPT2结果,我已经将正则表达式设置为这个(应用于实际输出(我上面的示例只是为了展示组织):</p>
<pre><code>NEVPT2_Section = r"(?:AILFT MATRIX ELEMENTS \(NEVPT2\)\n-+\n\n)([\s\S]*)(?:\n\n--------------\nCASSCF TIMINGS)"
NEVPT2_Section_mathes = re.finditer(NEVPT2_Section, inp_content, re.MULTILINE)
for xyz in NEVPT2_Section_mathes:
my_xyz = xyz.group(1)
print(my_xyz)
</code></pre>
<p>如果我正在处理一个只有一个作业的文件,它可以正常工作,从“NEVPT2 RESULTS”开始,在第一个“end”处停止,但是,多作业文件会找到第一个“NEVPT2 RESULTS”,并一直持续到最后一个“end”,捕获中间的所有内容</p>
<p>所以,在浪费了整个星期天的时间想弄明白这件事之后,我想听听你们的建议,伙计们。如何仅从每个NEVPT2节获取位</p>