擅长:python、mysql、java
<p>你很接近,只要在寻找<code>-</code>时添加一个可选的点匹配<code>\.?</code>,以及在数字前面有<code>( whitespace</code>和一个空格时分开大小写:</p>
<pre><code>(?:(?:\(\s)|\(?\d?)-?\.?\d{3}\s*[)-]?-?\.?\s*\d{3}\s*-?\.?\s*\d{4}\)?
</code></pre>
<p><a href="https://regex101.com/r/ejOOWq/4" rel="nofollow noreferrer">Regex Demo</a></p>
<p>等效,但使用或<code>|</code>和非匹配组:</p>
<pre><code>(?:(?:\(\s)|\(?\d?)(?:-|\.)?\d{3}\s*[)-]?(?:-|\.)?\s*\d{3}\s*(?:-|\.)?\s*\d{4}\)?
</code></pre>
<p><a href="https://regex101.com/r/ejOOWq/5" rel="nofollow noreferrer">Regex Demo</a></p>
<p><strong>输出:</strong></p>
<pre><code>['1.210.223.1112',
'(113)-945-6373',
'222.212.2333',
'(111)123-4567',
'(111)1234567',
'(111 )123-4567',
'1-100-533-1710',
'( 111)123-4567',
'(111)123-4567',
'(100) 115-5198',
'(110)-111-1111',
'112.222.1112',
'(222)-222-3337',
'(120) 305-1314']
</code></pre>