<p>您完全可以使用正则表达式来实现这一点:</p>
<pre><code>/(^Receptor Name:[^\n]*)(?:.*?^[-+]+)(.*?)(?=^Receptor Name:|\Z)/\1\2/gms
</code></pre>
<p><a href="https://regex101.com/r/aM0iD2/2" rel="nofollow">Demo</a></p>
<p>然后可以很容易地将其转换为Python逻辑来执行您想要的操作:</p>
<pre><code>txt='''\
Receptor Name:I151T.B99990002_mus.pdbqt
Liang Name: LIGAND 1
Using random seed: 1896818552
mode | affinity | dist from best mode
| (kcal/mol) | rmsd l.b.| rmsd u.b.
-+ + +
1 -10.7 0.000 0.000
2 -10.4 1.859 3.037
3 -10.1 1.992 3.474
Receptor Name: I151T.B99990001_mus.pdbqt
Liang Name: LIGAND 1
Using random seed: 1896818552
mode | affinity | dist from best mode
| (kcal/mol) | rmsd l.b.| rmsd u.b.
-+ + +
1 -9.5 0.000 0.000
2 -9.4 2.083 3.784
3 -9.0 2.471 8.360
4 -9.0 1.493 3.523'''
import re
pat=re.compile(r'(^Receptor Name:[^\n]*)(?:.*?^[-+]+)(.*?)(?=^Receptor Name:|\Z)', flags=re.S | re.M)
for m in pat.finditer(txt):
for line in m.group(2).splitlines():
line=line.strip()
if line:
print m.group(1), line
</code></pre>
<p>印刷品:</p>
<pre><code>Receptor Name:I151T.B99990002_mus.pdbqt 1 -10.7 0.000 0.000
Receptor Name:I151T.B99990002_mus.pdbqt 2 -10.4 1.859 3.037
Receptor Name:I151T.B99990002_mus.pdbqt 3 -10.1 1.992 3.474
Receptor Name: I151T.B99990001_mus.pdbqt 1 -9.5 0.000 0.000
Receptor Name: I151T.B99990001_mus.pdbqt 2 -9.4 2.083 3.784
Receptor Name: I151T.B99990001_mus.pdbqt 3 -9.0 2.471 8.360
Receptor Name: I151T.B99990001_mus.pdbqt 4 -9.0 1.493 3.523
</code></pre>