匹配电子邮件的Python正则表达式

时间:2018-09-23 15:45:46

标签: python regex

我的问题是编写一个给定电子邮件地址(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

1 个答案:

答案 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]强制行的结尾-$以字母字符结尾。

如果您仍然有一些无法使用的邮件,请检查一些正则表达式页面,稍加修改便可以使用。