python - RegEx - 如何仅获取在大输出中重复的多行文本 block ?

标签 python regex python-3.x

我正在解析量子化学软件的大输出(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 部分的位?

最佳答案

你可以使用

^NEVPT2.+?^end

多行模式下,请参阅a demo on regex101.com .

关于python - RegEx - 如何仅获取在大输出中重复的多行文本 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59246350/

相关文章:

python - 从多个文件读取行

javascript - 使用 Javascript Regex 在鼠标悬停期间获取 Href 的一部分

python - .py转.exe生成黑窗应用几秒后消失

python - 在 python for 循环中一次运行 3 个变量。

python - 如何将 csv 文件读入具有多行索引级别的 pandas DataFrame?

python获取非重复项-最快的方法

javascript - 使用正则表达式从数字中删除前导 + 或 00

Python 正则表达式 : How to match a number with a non-number?

python - os.environ 对 C 扩展模块的可见性

python-3.x - 使用循环创建多个数据框