擅长:python、mysql、java
<p>有几个问题</p>
<p>首先使用原始字符串<code>r""</code>。如果没有r,则会错误地转义值</p>
<p>第二,在点<code>.</code>上进行匹配时,应该将其转义。否则将匹配任何字符</p>
<p>最后<code>[A-Za-z]{2-3}</code>是不正确的。你需要做<code>[A-Za-z]{2,3}</code></p>
<pre><code># incorrect
"[\w._%+-]{1,20}@[\w.-]{2,20}.[A-Za-z]{2-3}"
# correct
r"[\w._%+-]{1,20}@[\w.-]{2,20}\.[A-Za-z]{2,3}"
</code></pre>
<p>例如:</p>
<pre><code>import re
emails = "skoal.com abc@com 123@abx.ty.com2 Manan.5587@gmail.com abc@bhe.com"
regex = r"[\w._%+-]{1,20}@[\w.-]{2,20}\.[A-Za-z]{2,3}"
print("Email Matches:", re.findall(regex, emails))
</code></pre>
<pre><code>Email Matches: ['123@abx.ty.com', 'Manan.5587@gmail.com', 'abc@bhe.com']
</code></pre>
<p>一般来说,在编写正则表达式时,从简单开始,然后逐步提高。调试时,首先测试<code>r"[\w._%+-]{1,20}"</code>,然后测试<code>r"[\w._%+-]{1,20}@[\w.-]{2,20}"</code>,等等,直到完整的正则表达式正常工作,并验证是否符合每次迭代的预期</p>