<p>这就是工作:</p>
<pre class="lang-py prettyprint-override"><code>import re
text = """
# My first header
## Nec sic igni ad ad aventi
Lorem markdownum quantumque nunc, fine superi sagittis, haut regalis attollo,
ora inferius, mensor deam? Sedili quoque tauri. Quo limite ducem.
1. Arva fecit partes tosta
2. Insignia est ausae ut ut ait
3. O summa saepe
Sic ipsos, Phlegethontide nisi poterat neque quos tum partes rapitur. Filius
utraque: glande.
# My second header
## Primordia metuam his dixerat talaria cognoscenda
Lorem markdownum revulsum dilexit contra. Qui seu supplex Themis profuit quoque
Hyperionis, omnibus aesculus signa medendi.
- Nostro purgamina capitque longis
- Virtus suo moenibus
# My third header
## Primordia metuam his dixerat talaria cognoscenda
Lorem markdownum revulsum dilexit contra. Qui seu supplex Themis profuit quoque
postquam, huic postera lignum, properent.
"""
def findHeader(search):
r = re.compile(r"(?<!#)# " + search + r"(?s)(?:(?!(?<!#)# ).)+")
return(r.findall(text))
print(findHeader("My second header"))
</code></pre>
<p><strong>输出:</strong></p>
<pre class="lang-none prettyprint-override"><code>['# My second header\n\n## Primordia metuam his dixerat talaria cognoscenda\n\nLorem markdownum revulsum dilexit contra. Qui seu supplex Themis profuit quoque\nHyperionis, omnibus aesculus signa medendi.\n\n- Nostro purgamina capitque longis\n- Virtus suo moenibus\n\n']
</code></pre>
<p><strong>说明:</strong></p>
<pre class="lang-none prettyprint-override"><code>r" # raw string
(?<!#) # negative lookbehind, make sure we haven't a # before
# # a # and a space
" # end string
+ # concat
search # header to be searched
+ # concat
r" # raw string
(?s) # . matches newline
(?: # non capture group (Tempered greedy token)
(?! # negative lookahead, mmake sure we haven't after:
(?<!#) # negative lookbehind, make sure we haven't a # before
# # a # and a space
) # end lookahead
. # any character including newline
)+ # end group, may appear 1 or more times
" # end string
</code></pre>