Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.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,我正在尝试创建一个函数来实现这一点: 确保域的开头或结尾没有 确保域中没有两个 确保域中至少有一个 像blabla@outlook.com,应该确保它不是: .blabla@outlook.com. blabla@outlook..com 确实如此blabla@outlook.com 以下是我更正域的代码: import re def correct_domain(domain): if re.search(r'^\.|.$', domain) and re.search(r'\

我正在尝试创建一个函数来实现这一点:

  • 确保域的开头或结尾没有
  • 确保域中没有两个
  • 确保域中至少有一个
像blabla@outlook.com,应该确保它不是:

.blabla@outlook.com.
blabla@outlook..com
确实如此blabla@outlook.com

以下是我更正域的代码:

import re
def correct_domain(domain):

    if re.search(r'^\.|.$', domain) and re.search(r'\.\.', domain):
        return False
    else re.search(r'\.', domain):
        return True

您在第二个点之前错过了一个
\
;将
更改为

if re.search(r'^\.|\.$', domain) or re.search(r'\.\.', domain):

您在第二个点之前错过了一个
\
;将
更改为

if re.search(r'^\.|\.$', domain) or re.search(r'\.\.', domain):

这在没有正则表达式的情况下很容易做到:

(domain[0] != '.' != domain[-1] and 
 '..' not in domain and 
 '.'  in domain)
如果要排除具有两个或两个以上句点的情况,通常可以尝试:

domain[0]  != '.' != domain[-1] and domain.count('.') == 1

这在没有正则表达式的情况下很容易做到:

(domain[0] != '.' != domain[-1] and 
 '..' not in domain and 
 '.'  in domain)
如果要排除具有两个或两个以上句点的情况,通常可以尝试:

domain[0]  != '.' != domain[-1] and domain.count('.') == 1

$
应该是
\.$
应该是
else
应该是
elif
,您应该添加最后一个
else
子句来处理没有点的域

if re.search(r'^\.|\.$', domain) or re.search(r'\.\.', domain):
    return False
elif re.search(r'\.', domain):
    return True
else:
    return False
我建议重新组织一下逻辑。您可以将前两个rege合并为一个。您可以在一个
return
语句中完成所有操作

return re.search(r'\.', domain) and not re.search(r'^\.|.$|\.\.', domain):
您也可以在不使用正则表达式的情况下执行这些特定的检查,这样更易于阅读:

return '.' in domain and not \
    (domain.startswith('.') or domain.endswith('.') or '..' in domain)

$
应该是
\.$
应该是
else
应该是
elif
,您应该添加最后一个
else
子句来处理没有点的域

if re.search(r'^\.|\.$', domain) or re.search(r'\.\.', domain):
    return False
elif re.search(r'\.', domain):
    return True
else:
    return False
我建议重新组织一下逻辑。您可以将前两个rege合并为一个。您可以在一个
return
语句中完成所有操作

return re.search(r'\.', domain) and not re.search(r'^\.|.$|\.\.', domain):
您也可以在不使用正则表达式的情况下执行这些特定的检查,这样更易于阅读:

return '.' in domain and not \
    (domain.startswith('.') or domain.endswith('.') or '..' in domain)

你的
else
应该改为
elif
。你的
else
应该改为
elif
。这难道不允许有两个不相邻周期的东西通过,只要它们都不在开始或结束时吗?@StephenTG我认为OP只想排除有两个连续周期的情况,我误读了这个问题吗?OP只说他们不想要两个句号,尽管唯一有两个句号的例子是两个连续的。@StephenTG好的,我添加了另一种方法来解释这个问题。这难道不允许有两个非相邻句号的东西通过吗,只要开头和结尾都没有?@StephenTG我以为OP只想排除连续两个周期的案例,我是否误解了这个问题?OP所说的只是他们不想要两个周期,尽管唯一一个连续两个周期的示例。@StephenTG Ok,我添加了另一种方法来解释这一点。我已经有了这个函数def construct_email(name,domain):返回name+“@”+domain,我需要一个名为correct_domain(domain)的函数来检查输入到“construct_email(name,domain)”中的电子邮件是否正确。有更好的方法吗?我已经有了这个函数def construct_email(name,domain):返回name+“@”+domain,我需要一个名为correct_domain(domain)的函数来检查在“construct_email(name,domain)”中输入的电子邮件是否正确。有更好的方法吗?