擅长:python、mysql、java
<p>有一个短正则表达式,可以用来匹配字母和数字之间的边界(在任何语言中):</p>
<pre><code>\d(?=[^_\d\W])|[^_\d\W](?=\d)
</code></pre>
<p><a href="https://regex101.com/r/HtOQKM/1" rel="nofollow noreferrer"><strong>Live demo</strong></a></p>
<p><strong>细分</strong>:</p>
<ul>
<li><code>\d</code>匹配一个数字</li>
<li><code>(?=[^_\d\W])</code>在一种语言的字母前面</li>
<li><code>|</code>或</li>
<li><code>[^_\d\W]</code>匹配一种语言的字母</li>
<li><code>(?=\d)</code>数字前</li>
</ul>
<p>Python:</p>
<pre><code>re.sub(r'\d(?![_\d\W])|[^_\d\W](?!\D)', r'\g<0> ', str, flags = re.UNICODE)
</code></pre>
<p>但根据<a href="https://stackoverflow.com/a/50018691/1020526">this answer</a>,<strong><em>这是完成这项任务的正确方法:</p>
<pre><code>re.sub(r'\d(?=[آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهی])|[آابپتثجچحخدذرزژسشصضطظعغفقکگلمنوهی](?=\d)', r'\g<0> ', str, flags = re.UNICODE)
</code></pre>