Python正则表达式检查是否包含特定字符

时间:2015-12-08 11:03:26

标签: python regex python-3.x

我正在尝试创建一个程序来检查电子邮件的验证,看它是否以小写字母开头,包含“@”符号,以及“.com”或“.co.uk”。我该怎么做呢。

我的网络很有趣,因此我无法在线查看表达式。

这是我到目前为止所做的:

def valid_email():
    email_address = input("Enter your email: ")
    valid = re.match("[a-z]",email_address)
    if valid:
        print("That looks OK")
    else:
        print("Invalid, must be lowercase and contain an '@' sign")
        valid_email()
valid_email()

3 个答案:

答案 0 :(得分:-1)

您可以编写valid = re.match(r"[a-z0-9]+@[a-z]+\.(com|co.uk)",email_address)

等正则表达式

这将检查您的电子邮件是否遵循您提到的模式。

对于进一步的验证,例如以小写字母开头,包含“@”符号,以及“.com”或“.co.uk”,您可以设置类似

的条件
     if '@' not in email_address:
       print "Must contain @" 

同样,你可以提出各种条件。

答案 1 :(得分:-1)

话虽如此,你的代码就是搜索 a-z 之间的任何字符并停止。 也就是说,如果地址是 blah@foo.co.uk ,那么你的正则表达式就会启动,看看那里有一个''在开头与[a-z]匹配并将停止。

而是使用'[a-z]+'这将继续搜索,直到达到.为止 @符号是必需的,因此应按原样放置。 现在正则表达式变为'[a-z]+@'
现在关于域的验证,请使用:'[\w.]+[a-z]+'
因此,您的最终正则表达式(根据您的要求)变为:
re.match(r'[a-z]+@[\w.]+[a-z]+')

但上面是非常弱的正则表达式,并且不会考虑可能在用户名字段中出现的_.。我强烈建议您使用已经可用于电子邮件验证的正则表达式,而不是尝试制作自己的正则表达式。

以下是完整电子邮件验证的正则表达式(对于python):

r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)" (来自http://emailregex.com/

这里是General Email Regex:

(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

答案 2 :(得分:-2)

您的正则表达式包含以下语句:

  • 只是1" @"符号(可以写成" @")
  • 1或更多" a-z"开头的字母(可以写成[a-z] +)
  • 任何事情直到" @"符号(可以写成[^ @] +)
  • 1" .com"或" .co.uk" (可以写成。[^ @] +)

所以你的正则表达式应该是这样的:

valid = re.match(r"[a-z]+[^@]+?\.[^@]+", email_address)