擅长:python、mysql、java
<p>正则表达式有两个主要问题:
-每个小部分都有圆括号,这就是为什么在输出中得到“”空字符串和'-'。你应该只在你想返回的部分加上括号(虚线和空格不是这样)。如果你去掉这些,你会得到更合理的结果:</p>
<pre><code>phoneregex=re.compile(r'((\(\d{4}\))|(d{4}))?\s?-?(\d{7})')
phoneregex.findall('(0245)3952568')
> [('(0245)', '(0245)', '', '3952568')]
</code></pre>
<ul>
<li>第二个问题是您在正则表达式中有“|”或实际上允许两者都匹配字符串。这里有第一个匹配的左手re'(0245)',然后右手边匹配代码和7位数字,所以您得到代码两次。在</li>
</ul>
<p>此简化版本适用于您:</p>
^{pr2}$
<p>希望这有帮助。在</p>
<p>请多读一点regexp是如何工作的,因为有些行为对于初学者来说可能是不直观的:<a href="https://developers.google.com/edu/python/regular-expressions#greedy-vs-non-greedy-optional" rel="nofollow noreferrer">https://developers.google.com/edu/python/regular-expressions#greedy-vs-non-greedy-optional</a></p>