【发布时间】:2021-05-22 16:16:20
【问题描述】:
我想编写一个函数来解析电子邮件输入并返回一个带有 (id, domain) 的元组。 id 是用户名,而 domain 是域名。以@字符分隔的电子邮件
例如:kyle@asu.edu 将解析为 ('kyle', 'asu.edu')。但以下是对该功能的一些额外限制:
- 用户名以字母字符开头
- 域名以字母字符结尾
- 允许使用特殊字符,例如 .、-、_ 或 +
- 不允许使用空格字符,包括前导或尾随空格
因此,如果违反上述任何规则,则电子邮件输入不会被视为有效的电子邮件地址,应引发 ValueError。
以下是我尝试的代码,但不太有效:
def email_func(string_input):
"""Parses a string as an email address, returning an (id, domain) pair."""
###
### YOUR CODE HERE
regex_parse = re.search(r'([a-zA-Z_+-.]+)@([a-zA-Z.-]+)', string_input)
# print (regex_parse)
try:
return regex_parse.groups()
except ValueError:
raise ValueError ('not a valid email address')
###
举个简单的例子。
email_func('kyle@asu.edu') returns `('kyle', 'asu.edu')` which is correct.
我的代码不起作用的实例:
-
对于带有空格的无效输入字符串,我不会引发 ValueError。例如:
email_func('kyle @asu.edu')输出错误:---> 11 返回 regex_parse.groups()
AttributeError:“NoneType”对象没有属性“组” -
我没有收到前导空格的 ValueError:例如:
email_func(' kyle@asu.edu')输出('kyle', 'asu.edu')与尾随空格相同的问题。 -
如何在我的正则表达式中指定电子邮件不能以数字开头或结尾/必须是字母字符?
【问题讨论】:
-
你为什么期待
ValueError?当re.search()找不到匹配项时,它返回None。None.groups()提升AttributeError,而不是ValueError。 -
嗯,我没有意识到这一点。我将研究这两个错误之间的区别。
标签: python regex match valueerror