擅长:python、mysql、java
<p>您可以将包含相同字符的整个单词匹配并捕获到一个捕获组中,然后在所有其他上下文中匹配重复的连续字母,并相应地替换:</p>
<pre class="lang-py prettyprint-override"><code>import re
text = "aaa, aa, a,broom, school...boo, gool, ooow."
print( re.sub(r'\b(([a-zA-Z])\2+)\b|([a-zA-Z])\3+', r'\1\3', text) )
# => aaa, aa, a,brom, schol...bo, gol, ow.
</code></pre>
<p>见<a href="https://ideone.com/CgJACp" rel="nofollow noreferrer">Python demo</a>和<a href="https://regex101.com/r/vqrbFW/1" rel="nofollow noreferrer">regex demo</a></p>
<p><strong>正则表达式详细信息</strong></p>
<ul>
<li><code>\b</code>-单词边界</li>
<li><code>(([a-zA-Z])\2+)</code>-组1:一个ASCII字母(捕获到组2中),然后出现一个或多个相同的字母</li>
<li><code>\b</code>-单词边界</li>
<li><code>|</code>-或</li>
<li><code>([a-zA-Z])</code>-组3:捕获到组3中的ASCII字母</li>
<li><code>\3+</code>-组3中捕获的字母的一次或多次出现</李>
</ul>
<p>替换是组1和组3值的串联</p>
<p>要匹配任何Unicode字母,请将<code>[a-zA-Z]</code>替换为<code>[^\W\d_]</code></p>