<p>可以嵌套两个正则表达式:</p>
<pre><code>txt='''\
PATTERN1 PTR1 blah blah blah
needThis1 blah blah blah
thisOneAsWell1 blah blah blah
PATTERN2
PATTERN1 PTR2 blah blah blah
needThis2 blah blah blah
thisOneAsWell2 blah blah blah
PATTERN2
............................
............................
PATTERN1 PTRN blah blah
needThisN blah blah blah
thisOneAsWellN blah blah blah
PATTERN2'''
import re
for m in re.finditer(r'^PATTERN1\s*(.*?)(?=^PATTERN2)', txt, re.M | re.S):
print re.findall(r'(^\w+)', m.group(1), re.M)
</code></pre>
<p>印刷品:</p>
<pre><code>['PTR1', 'needThis1', 'thisOneAsWell1']
['PTR2', 'needThis2', 'thisOneAsWell2']
['PTRN', 'needThisN', 'thisOneAsWellN']
</code></pre>
<hr/>
<p>编辑1</p>
<p>如果您使用的文件很容易放入内存:</p>
<pre><code>with open(fn) as f:
txt=f.read()
for m in re.finditer(r'^PATTERN1\s*(.*?)(?=^PATTERN2)', txt, re.M | re.S):
print re.findall(r'(^\w+)', m.group(1), re.M)
</code></pre>
<p>使用<a href="https://docs.python.org/2/library/mmap.html" rel="nofollow">mmap</a>处理不容易放入内存的较大文件。你知道吗</p>
<hr/>
<p>编辑2</p>
<p>将结果合并成字符串后,只需将结果附加到列表中:</p>
<pre><code>with open(fn) as f:
results=[]
txt=f.read()
for m in re.finditer(r'^PATTERN1\s*(.*?)(?=^PATTERN2)', txt, re.M | re.S):
results.append('\n'.join(re.findall(r'(^\w+)', m.group(1), re.M))
print '\n===\n'.join(results)
</code></pre>