<p><a href="https://stackoverflow.com/users/6451573/jean-fran%c3%a7ois-fabre">Jean-François</a>的评论会更好,但是如果我们不得不这么做,我猜我们应该从以下表达式开始:</p>
<pre><code>(<\/a>)([^<]+)?(<\/p>)
(<\/a>)(chapter\s+[0-9]+[^<]+)?(<\/p>)
</code></pre>
<p>替换为:</p>
<pre><code>\1<h2>\2</h2>\3
</code></pre>
<h3><a href="https://regex101.com/r/UpTPr9/1" rel="nofollow noreferrer">Demo 1</a></h3>
<h3><a href="https://regex101.com/r/HEQOHQ/1/" rel="nofollow noreferrer">Demo 2</a></h3>
<h3>测试</h3>
<pre><code># coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r"(<\/a>)(chapter\s+[0-9]+[^<]+)?(<\/p>)"
test_str = ("<p class=\"calibre1\"><a id=\"p1\"></a>Chapter 370: Slamming straight on</p>\n"
"<p class=\"softbreak\"> </p>\n"
"<p class=\"calibre1\">Hearing Yan Zhaoge’s suggestion, the Jade Sea City martial practitioners here were all stunned.</p>\n"
"<p class=\"calibre1\"><a id=\"p7\"></a>Chapter 372: Yan Zhaoge’s plan</p>\n"
"<p class=\"softbreak\"> </p>\n"
"<p class=\"calibre1\">Yan Zhaoge and Ah Hu sat on Pan-Pan’s back, black water swirling about Pan-Pan’s entire body, keeping away the seawater as he shot forward at lightning speed.</p>")
subst = "\\1<h2>\\2</h2>\\3"
# You can manually specify the number of replacements by changing the 4th argument
result = re.sub(regex, subst, test_str, 0, re.MULTILINE | re.IGNORECASE)
if result:
print (result)
# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.
</code></pre>