擅长:python、mysql、java
<p>将<code>re.sub</code>直接与方法一起使用作为替换:</p>
<pre class="lang-py prettyprint-override"><code>regex = re.compile(r'(\$[^$]*\$)|[^\x00-\x7F]+|\(')
print(regex.sub(lambda m: m.group(1) or " ", s))
</code></pre>
<p>见<a href="https://tio.run/##NY1Ba8IwHEfv/RQ/SqDJ1OLYYDDoVfDiFzAKsf5tA0kT0hQrutu@0U47i5@rtoMd34PH85dYu@ZtGLT1LkQESloUSNcNGLi0KtalMtfNV/Eu8Pi9/zy@Gc6Ek@4Ra7IonfWGIpnLyMF1VT15HDtldBydA286Y/7jNAlUUT8uAuVTqw3xkHHJtnu2e5FM3LZ72S@XC9l/rHazm@SZSHzQTeR/Zd52B26UPRwV7CdsXo1Tz18FXECKdI5WiGF4Ag" rel="nofollow noreferrer">proof online</a></p>
<p><strong>它有什么作用</strong></p>
<ol>
<li><code>(\$[^$]*\$)|[^\x00-\x7F]+|\(</code>使用<code>(\$[^$]*\$)</code>将两个美元符号之间的所有字符捕获到ID为1的捕获组中,并在不捕获的情况下将所有非ASCII或<code>(</code>字符与<code>[^\x00-\x7F]+|\(</code>匹配</李>
<li>如果第一个替代项匹配,则字符串中不会替换任何内容(因为<code>m.group(1)</code>会将匹配的内容放回原处),否则,替换项是一个空格</李>
</ol>