使用过滤器验证电子邮件地址:hackerrnak问题

时间:2019-04-02 10:48:05

标签: python regex

我想要一个正则表达式来解决这个问题。

我已经解决了Hackerrank Validating Email Addresses With a Filter

中的问题

这是我的解决方案:

def fun(s):
    if s.count('@')==1 and s.count('.')==1:
        username, websites = s.split('@')
        website, extension = websites.split('.')
        if  not (len(username)>0 and len(website)>0 and website.isalnum() and len(extension)<=3):
            return False        
        for i in username:
            if  not (i.isalpha() or i.isdigit() or i in ['-','_']):
                return False         
        return True
    return False

我发现可以使用正则表达式来完成。

有人可以帮我吗?

3 个答案:

答案 0 :(得分:2)

import re
def fun(s):
    emailed=[]
    if bool(re.match(r'^([a-z0-9_\-]+)@([a-z0-9]+)\.([a-z]{1,3})$',s)):
        emailed.append(s)
    elif s=='': 
        return []
    


    return sorted(emailed)             
        

def filter_mail(emails):
    return list(filter(fun, emails))

if __name__ == '__main__':
    n = int(input())
    emails = []
    for _ in range(n):
        emails.append(input())

filtered_emails = filter_mail(emails)
filtered_emails.sort()
print(filtered_emails)

答案 1 :(得分:1)

应该注意的是,使用正则表达式匹配通用邮件地址可能非常困难,而且看起来并不简单。

但是,此挑战的规则将其简化了很多:

  
      
  • 它必须具有username@websitename.extension格式类型。
  •   
  • 用户名只能包含字母,数字,破折号和下划线。
  •   
  • 网站名称只能包含字母和数字。
  •   
  • 扩展名的最大长度为3。
  •   

正则表达式示例为^[\w-]+@[a-zA-Z\d]+\..{,3}$

答案 2 :(得分:0)

规则似乎有点奇怪(扩展名可以是任何东西,只要它的长度最大为3?)。不过,'[\w\d-]+@[A-Za-z\d]\..{1,3}$'应该可以工作。

注意:您需要$(代表字符串的结尾),否则,您将匹配任何扩展名超过3个字母的电子邮件地址,我相信,这个问题的目的是错误的。