<p>使用<code>re.sub</code>时,必须捕获要保留的文本,而不应捕获要删除的文本</p>
<p>使用</p>
<pre><code>re.sub(r"([a-z])_(?=[a-z])",r"\1'",s)
</code></pre>
<p>见<a href="https://regex101.com/r/vU8ogh/1" rel="nofollow noreferrer">proof</a></p>
<p><strong>解释</strong></p>
<pre><code>NODE EXPLANATION
( group and capture to \1:
[a-z] any character of: 'a' to 'z'
) end of \1
_ '_'
(?= look ahead to see if there is:
[a-z] any character of: 'a' to 'z'
) end of look-ahead
</code></pre>
<p><a href="https://tio.run/##K6gsycjPM/7/PzO3IL@oRKEolatYwVZBKbE4JQ2IFRLjkxRSitNSlLgKijLzSjSKUvWKS5M0ipQ0ohN1q2I14zXsbSEsJZ0ipRhDdSWdYk3N//8B" rel="nofollow noreferrer">Python code</a>:</p>
<pre><code>import re
s = "asdfasd a_b dsfd"
print(re.sub(r"([a-z])_(?=[a-z])",r"\1'",s))
</code></pre>
<p>输出:</p>
<pre><code>asdfasd a'b dsfd
</code></pre>