我的问题是编写一个给定电子邮件地址(a)的函数,该函数返回与用户名和域名对应的(用户,域)。 给定bob@aus.space.com,它应该返回(bob,aus.space.com)。
该功能仅在满足以下条件时才匹配
域名必须以字母字符结尾。 字母字符可以是大写或小写。 不允许使用空格字符。
以下是我当前的代码,并且收到无效的语法错误。我们将不胜感激如何使此操作更轻松或更清洁。
import re
def find_email (s):
re_pattern = (r"(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0- 9-.]+$)")
regular_expression_object = re.compile(re_pattern)
match_object = regular_expression_object.match(s)
if match_object != None:
return (match_object.match(s).group('user'),match_object(s).group('domain'))
else:
raise ValueError
答案 0 :(得分:0)
似乎此代码就是您想要的:
import re
def find_email (s):
re_pattern = (r"(?P<user>^[a-zA-Z][a-zA-Z0-9_.+-]+)@(?P<domain>[a-zA-Z0-9-._]+[a-zA-Z])$")
regular_expression_object = re.compile(re_pattern)
match_object = regular_expression_object.match(s)
if match_object != None:
return (match_object.group('user'), match_object.group('domain'))
else:
raise ValueError
[In]: find_email("user@email.domain.com")
[Out]: ('user', 'email.domain.com')
如果您已经使对象匹配,则无需再次调用“匹配”-它已经具有组。
使用某种形式的正则表达式帮助站点也是一种好习惯-有很多这样的站点,例如regex101。
编辑:好,对它进行了一些修改。
由于第一个字符必须为字母,因此必须检查其[a-zA-Z]
,然后是[a-zA-Z0-9_.+-]
,其中+
表示1或更大(如果您将其更改为*
,想要包含字母数字字符的1个字母的用户名)以及您在原始帖子中输入的一些特殊字符。
在@
之后,[a-zA-Z0-9-._]+
表示此括号中的1个或多个字符,后跟[a-zA-Z]
强制行的结尾-$
以字母字符结尾。
如果您仍然有一些无法使用的邮件,请检查一些正则表达式页面,稍加修改便可以使用。