我的电子邮件地址有问题,只要稍作更正,它们就可以转换为有效的电子邮件地址。
例如:
%20adi@gmail.com, --- Not valid
'sam@tell.net, --- Not valid
(hi@telligen.com), --- Not valid
(gii@weerte.com), --- Not valid
:qwert34@embright.com, --- Not valid
//24adifrmaes@microsot.com --- Not valid
tellei@apple.com --- valid
...
我可以写";如果为"否则";,但如果一个新的电子邮件地址有新的问题,我需要写";如果其他";并每次更新。
清除所有这些小问题的最佳方法是什么,一些python包或regex?请放心。
你可以这样做(我基本上会检查电子邮件中的元素是阿尔法字符还是点,如果不是,就会删除它们(:
emails = [
'sam@tell.net',
'(hi@telligen.com)',
'(gii@weerte.com)',
':qwert34@embright.com',
'//24adifrmaes@microsot.com',
'tellei@apple.com'
]
def correct_email_format(email):
return ''.join(e for e in email if (e.isalnum() or e in ['.', '@']))
for email in emails:
corrected_email = correct_email_format(email)
print(corrected_email)
输出:
sam@tell.net
hi@telligen.com
gii@weerte.com
qwert34@embright.com
24adifrmaes@microsot.com
tellei@apple.com
数据清理很混乱,但我发现定义一组规则的方法是一种简单的管理方法(规则的顺序很重要(:
rules = [
lambda s: s.replace('%20', ' '),
lambda s: s.strip(" ,'"),
]
addresses = [
'%20adi@gmail.com,',
'sam@tell.net,'
]
for a in addresses:
for r in rules:
a = r(a)
print(a)
这是结果输出:
adi@gmail.com
sam@tell.net
确保您编写的测试套件包含无效数据和有效数据。这很容易打破,你可能会经常调整规则。
虽然我在上面的规则中使用了lambda,但它可以是一个接受和返回字符串的任意复杂函数。
如果您有更多不同的测试用例,即email@email.com.
、,,email@email.com.@_)
或..email@email.com@@@
,那么这实际上是一个复杂的测试用例。尽管如此,你可以剥去它们,但不能局限于最后和开始要剥去的东西。
注意:带有数字和_的电子邮件地址也是有效的。
emails = [
'sam@tell.net',
'(hi@telligen.com)',
'(gii@weerte.com)',
':qwert34@embright.com',
'//24adifrmaes@microsot.com',
'tellei@apple.com'
]
def clean(email):
return ''.join(filter(lambda x: ord(x) >= 65 or x in ['.', '@', '_'], email))
for email in emails:
print(clean(email))
输出:
sam@tell.net
hi@telligen.com
gii@weerte.com
qwert@embright.com
adifrmaes@microsot.com
tellei@apple.com