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)