为了账号安全,请及时绑定邮箱和手机立即绑定

使用正则表达式验证电子邮件

使用正则表达式验证电子邮件

守着星空守着你 2023-03-08 10:43:29
我有一个电子邮件验证正则表达式。我想要实现的是,如果任何电子邮件与正则表达式模式不匹配,我只想显示那些与正则表达式匹配的字符并删除不匹配的字符。pattern=r'(^a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)'例如:如果我的验证失败是因为存在“'”和“?” 在电子邮件中,那么我建议的电子邮件应该包含除这两个字符之外的所有字符。如果输入与模式不匹配,则:input="t'ogfni?fyevdsj@hmi.dev"    expected output = "togfnifyevdsj@hmi.dev"我怎样才能做到这一点?目前我正在使用,z=list(input)sp=[]for j in range(len(z)):    result=re.findall(pattern,z[j])    if len(result)!=0:        sp.append(result[0])output=''.join(sp)但是,这给了我一个空白输出。除此之外,这种方法的另一个问题是,如果电子邮件输入有 2'@',它不会检测到异常谁能建议在这里进行的正确方法是什么?
查看完整描述

1 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

如果您假设字符串中至少有一个并且在它之后至少有一个,那么在您的主要验证正则表达式失败时,您可以捕获电子邮件的三个部分,并从中删除所有不需要的字符并连接回一个“干净的@” .“ 电子邮件:


import re

pattern = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+(?:\.[a-zA-Z0-9-]+)+$'

text = "t'ogfni?fyevdsj@hmi.dev"

def repl(x):

    return "{}@{}.{}".format(re.sub(r'[^a-zA-Z0-9_.+-]+', '', x.group(1)),

        re.sub(r'[^a-zA-Z0-9.-]+', '', x.group(2)),

        re.sub(r'[^a-zA-Z0-9.-]+', '', x.group(3)))


if re.fullmatch(pattern, text):

    print("Valid email: {}".format(text))

else:

    email = re.sub(r"(.*)@(.*)\.(.*)", repl, text)

    print("Filtered email: {}".format(email))

查看Python 演示,输出为Filtered email: togfnifyevdsj@hmi.dev.


还有另一种清理部分的方法@:拆分.并删除所有字符[^a-zA-Z0-9-]+中匹配的所有字符,然后将它们连接回去:


def repl(x):

    return "{}@{}".format(re.sub(r'[^a-zA-Z0-9_.+-]+', '', x.group(1)),

        ".".join([re.sub(r'[^a-zA-Z0-9-]+', '', y) for y in x.group(2).split('.')]) )

请参阅此 Python 演示



查看完整回答
反对 回复 2023-03-08
  • 1 回答
  • 0 关注
  • 72 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信