正则表达式(PYTHON)

正则表达式(PYTHON),python,regex,Python,Regex,我有一个HTML表单,要求用户输入他/她的电子邮件地址。如果电子邮件的格式为:第一,我只能继续/提交表格。last@example.com “第一”和“最后”可以是任何东西,但是它必须有中间的“..”,它必须以“@示例.com”结尾。 有人能告诉我我可以用什么正则表达式吗?像这样的东西应该可以用 r'^([^@.]+)\.([^@.]+)@example\.com$' ^匹配字符串的开头 $匹配结尾 通过编写^…$,可以确保字符串与正则表达式完全相同。比如foo。bar@example.co

我有一个HTML表单,要求用户输入他/她的电子邮件地址。如果电子邮件的格式为:第一,我只能继续/提交表格。last@example.com

“第一”和“最后”可以是任何东西,但是它必须有中间的“..”,它必须以“@示例.com”结尾。
有人能告诉我我可以用什么正则表达式吗?

像这样的东西应该可以用

r'^([^@.]+)\.([^@.]+)@example\.com$'
  • ^
    匹配字符串的开头
  • $
    匹配结尾
  • 通过编写
    ^…$
    ,可以确保字符串与正则表达式完全相同。比如
    foo。bar@example.comasdfg
    不匹配
  • [^@.]+
    匹配不是
    @
    的连续字符序列
非正则表达式解决方案如下所示:

def validate_email(email):
    if not email.endswith('@example.com'):
        return False

    chunks = email.split('.')

    return len(chunks) == 3 and all(chunks)

您不需要正则表达式,可以使用:

def email_validator(email):
    if not email.endswith('@example.com'):
        return False

    if not email[:-12].count('.') == 1:
        return False
    return True
编辑:修正了@John Y、@manu fatto的建议,我建议
^(+?)\.(++?)@example\.com$
+?
部分意味着在第一部分的
之前和之后必须有一些东西。

我建议
r'^(\w*?)\(\w*?)@example\.com$”
。这与Blender的答案相同,只是它将“first”和“last”的内容限制为“word”字符,其中包括大写和小写字母、数字和下划线(
)。如果您想允许更多字符,例如
-
,您可以通过替换以下备用版本中的
@
来实现:

r'^([\w@]*?)\([\w@]*?)@example\.com$”

例如,如果您希望允许
-
&
,则应该是:

r'^([\w&\-]*?)\([\w&\-]*?)@example\.com$”


(在
-
前面的反斜杠是因为
-
在字符类中有一个特殊的含义。)

您尝试过什么正则表达式?嗯,到目前为止还没有。我是python新手,正则表达式教程中有太多的信息,无法一下子理解。@user1987508。。然后一步一步地学习。当然,你不可能一次就把所有东西都抓住。你需要学习一些概念,以多种方式将其应用于多个问题。这就是你学习的方式。我们不会在这里解决某人的问题,除非他自己尝试过什么。所以,请首先提出一些解决方案。从用户体验的角度来看,这很奇怪。为什么您会拒绝输入恰好不包含句点的有效电子邮件地址的人?另外,(剧透:有一百行长)@Kevin因为OP指定了一个特定的域名,毫无疑问他/她知道公司只分配第一种格式的电子邮件。最后。可能想禁止组中的
@
,否则,例如'foo'。bar@blah@我喜欢你尝试展示正则表达式和非正则表达式的方法。不幸的是,在这里避免使用正则表达式确实会让事情变得更加冗长。例如,如果您只在“.”上拆分,并且对任意三个非空的区块感到满意,那么您可以接受诸如“foo.@example.com”或“@.@example.com”之类的内容。@DanielRoseman从技术上讲
@
是电子邮件本地部分的有效字符(例如:
”abc@def“@example.com
是RFC 2821规定的有效电子邮件)@约翰尼:你可以简化最后一行,只返回len(chunks)==3和all(chunks)。就我个人而言,我喜欢非正则表达式的解决方案。我自己通常更喜欢非正则表达式,但您所介绍的内容过于宽松(如果我理解OP的话)。在前缀中,检查字符串结尾是否与某些精确的文字字符匹配的最佳方法不是使用slice,而是使用
endswith
string方法。如果不是email.endswith('@example.com'):,您的第一个
if
语句就是
if。