Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 函数,该函数从断言中给定的字符串中提取电子邮件地址,并在列表中给出_Python_Regex - Fatal编程技术网

Python 函数,该函数从断言中给定的字符串中提取电子邮件地址,并在列表中给出

Python 函数,该函数从断言中给定的字符串中提取电子邮件地址,并在列表中给出,python,regex,Python,Regex,在我继续之前,以前有很多问题都是这样问的,但我没有发现一个是这样的 我想写一个函数来正确解释这些结果,并给出显示的输出 assert get_mail("") == [] assert get_mail("rektor@kth.se") == ["rektor@kth.se"] assert get_mail("Private mail is foo@gmail.com work mail is bar@corp.com.&q

在我继续之前,以前有很多问题都是这样问的,但我没有发现一个是这样的

我想写一个函数来正确解释这些结果,并给出显示的输出

assert get_mail("") == []
assert get_mail("rektor@kth.se") == ["rektor@kth.se"]
assert get_mail("Private mail is foo@gmail.com work mail is bar@corp.com.") == ["foo@gmail.com", "bar@corp.com"]
也就是说,它从给定给函数的字符串中提取电子邮件地址,并在列表中返回它们。 我想到的是这个

import re  
def get_mail(text):
    email_list = []
    s = text
    match = re.findall(r'[\w\.-]+@[\w\.-]+', text)
    email_list.append(match)
    return email_list

我的理由是:我从一个空的列表开始,在这个列表后面应该附加地址。我说get_mail()中的文本是s,然后扫描s,只查找电子邮件地址并返回附加列表,但显然有些地方出错或缺失。

您的代码有两个问题。首先,您已经将函数过于复杂化,并且它在一个列表中返回一个列表。因此,使断言失败。相反,下面这样一个简单的get_mail()函数将修复第二个断言错误:

def get_mail(text):
    match = re.findall(r'[\w\.-]+@[\w\.-]+', text)
    return match
第二个问题是,您的电子邮件正则表达式模式不是最优的,在第三个断言测试中,它提取:

['foo@gmail.com', 'bar@corp.com.']
这与您想要的不一样:

['foo@gmail.com', 'bar@corp.com']

你看到区别了吗?是不是在'结尾的1点bar@corp.com.这就是问题的根源。不建议您编写自己的电子邮件正则表达式模式,但建议您在网上找到一个最佳的正则表达式。这将解决您的第三个断言错误。

您的代码有两个问题。首先,您已经将函数过于复杂化,并且它在一个列表中返回一个列表。因此,使断言失败。相反,下面这样一个简单的get_mail()函数将修复第二个断言错误:

def get_mail(text):
    match = re.findall(r'[\w\.-]+@[\w\.-]+', text)
    return match
第二个问题是,您的电子邮件正则表达式模式不是最优的,在第三个断言测试中,它提取:

['foo@gmail.com', 'bar@corp.com.']
这与您想要的不一样:

['foo@gmail.com', 'bar@corp.com']

你看到区别了吗?是不是在'结尾的1点bar@corp.com.这就是问题的根源。不建议您编写自己的电子邮件正则表达式模式,但建议您在网上找到一个最佳的正则表达式。这将解决您的第三个断言错误。

您不必追加,re.findall将返回列表。哦,好的!那么电子邮件列表。附加(匹配)可以被删除吗?是的,你可以阅读更多关于re.findall的信息。我让它工作了!我替换了电子邮件列表。用打印(匹配)追加(匹配),所有断言都正确显示。非常感谢。我认为您可以
返回re.findall(r'[\w\.-]+@[\w\.-]+',text)
您不必附加,re.findall将返回列表。哦,好的!那么电子邮件列表。附加(匹配)可以被删除吗?是的,你可以阅读更多关于re.findall的信息。我让它工作了!我替换了电子邮件列表。用打印(匹配)追加(匹配),所有断言都正确显示。非常感谢。我想您可以
返回re.findall(r'[\w\.-]+@[\w\.-]+',text)