擅长:python、mysql、java
<p>如果您坚持使用基于regex的解决方案,我建议:</p>
<pre><code>>>> pat = re.compile(r'(^#[0-9]{2,})\s*\n((?:[^#].*\n)*)', re.MULTILINE)
>>> for t, e in pat.findall(s):
... print t, e.count('\n')
...
#100 3
#1299 4
#1335 6
</code></pre>
<p>说明:</p>
^{pr2}$
<p>你似乎误解了消极展望的作用。在<code>.*</code>之后,regex引擎首先尝试使用尽可能多的字符,然后才检查lookahead模式。如果lookahead不匹配,它将逐个字符回溯,直到匹配为止。在</p>
<p>但是,您可以将<em>正</em>lookahead与非贪心的<code>.*?</code>一起使用。在这里,<code>.*?</code>将使用字符,直到lookahead在一行的开头看到一个#,或者在整个字符串的末尾:</p>
<pre><code>re.compile(r'(^#[0-9]{2,})\s*\n(.*?)(?=^#|\Z)', re.DOTALL | re.MULTILINE)
</code></pre>