【发布时间】:2015-01-17 21:51:44
【问题描述】:
我一直在尝试寻找代码来匹配项目电子邮件中的正则表达式。这些是要求:
电子邮件必须采用 acct@domain 格式
我已经用代码弄清楚了acct部分:
if re.search("^[a-zA-z0-9]+[a-zA-z0-9-_]*$|^[a-zA-z0-9]+[a-zA-z0-9-_]+[\.]{1}[a-zA-z0-9]{2,}$", email):
print "valid!"
还有域名:
if re.search("^[a-zA-z0-9]+[a-zA-z0-9-_]+[\.]{1}[a-zA-z0-9]{2,}$", email):
print "valid!"
我的问题是我无法弄清楚如何将它们组合在一起并放置@符号
我尝试了以下方法,但似乎不起作用。
if re.search("(^[a-zA-z0-9]+[a-zA-z0-9-_]*$|^[a-zA-z0-9]+[a-zA-z0-9-_]+[\.]{1}[a-zA-z0-9]{2,}$)@(^[a-zA-z0-9]+[a-zA-z0-9-_]+[\.]{1}[a-zA-z0-9]{2,}$)", email):<br>
print "valid!
"
它不起作用!我无法让它永远匹配。如果您有使代码不那么笨拙的建议,请告诉我!
【问题讨论】:
-
这些要求从何而来?他们很古怪。拥有像
u.thant@un.example.org这样的电子邮件地址是相当普遍的,因为有些人的名字是一个字母。 -
另外,
{1}量词完全是多余的,字符类中的反斜杠与文字反斜杠匹配。您只需要\.或[.]。 -
您只允许在帐户名或域部分中使用一个句点。您的要求意味着允许多个句点,只要它们之间有多个字母数字字符。这有点难以组合——您可以使用前瞻断言来组合多个重叠约束,但这会使正则表达式显着复杂化。鉴于需求似乎是凭空提出的,我不确定是否值得付出努力。但您当然可以在此网站上找到数百个类似问题的示例来学习。
-
你在所有字符类中有错字
A-z必须是A-Z -
@tripleee 它是一个非常简单的初学者 python 类,要求有点偏,但感谢您的洞察力!!
标签: python regex grouping email-validation