我正在解析量子化学软件的大输出(25 MB provided here)。该软件使用两种方法进行计算:CASSCF 和 NEVPT2。每种方法执行相同的计算,导致不同的结果。实际上,我已经将我的脚本设置为针对不同的配置多次运行计算,所以最后我有这样的组织:
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
我只想要 NEVPT2 结果,并且我已将正则表达式设置为这个(应用于实际输出(我上面的示例只是为了显示组织):
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)
如果我正在使用一个只有一个作业的文件,它可以正常工作,从“NEVPT2 RESULTS”开始并在第一个“end”处停止,但是多作业文件找到第一个“NEVPT2 RESULTS”并继续直到最后一个“结束”,捕捉中间的所有内容。
所以,在浪费了整个周日试图解决这个问题之后,我向你们寻求建议,伙计们。如何仅获取每个 NEVPT2 部分的位?
最佳答案
关于python - RegEx - 如何仅获取在大输出中重复的多行文本 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59246350/