用于在电子邮件地址中查找点的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
以下是我更正域的代码:
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)”中输入的电子邮件是否正确。有更好的方法吗?