擅长:python、mysql、java
<p>你可以用</p>
<pre><code>^(?!=.*[_.:;\-\\\/@+*]{2})(?=[^\d\n]*\d)[\w.:;\-\\\/@+*]+$
</code></pre>
<p><a href="https://regex101.com/r/idiHPX/1" rel="nofollow noreferrer">Regex demo</a></p>
<p>负前瞻<code>(?=[^\d\n]*\d)</code>匹配除数字或换行符以外的任何字符。使用一个否定字符类,然后匹配一个数字</p>
<p>请注意,您还必须添加<code>*</code>,并且大多数字符不必在character类中转义</p>
<p>使用对比度,您还可以将第一个<code>.*</code>转换为一个否定字符类,以防止一些回溯</p>
<pre><code>^(?!=[^_.:;\-\\\/@+*\n][_.:;\-\\\/@+*]{2})(?=[^\d\n]*\d)[\w.:;\-\\\/@+*]+$
</code></pre>
<hr/>
<p>编辑</p>
<p>如果没有锚,您可以在左侧<code>(?<!\S)</code>和右侧<code>(?!\S)</code>使用空白边界</p>
<pre><code>(?<!\S)(?!=\S*[_.:;\-\\\/@+*]{2})(?=[^\d\s]*\d)[\w.:;\-\\\/@+*]+(?!\S)
</code></pre>
<p><a href="https://regex101.com/r/LAjXYm/1" rel="nofollow noreferrer">Regex demo</a></p>