我正在尝试创建一个能够执行此操作的函数:
.
。.
。.
。与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
答案 0 :(得分:3)
.$
应为\.$
,and
应为or
。 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
我建议稍微重组一下逻辑。您可以将前两个组合合并为一个。您可以在一个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)
答案 1 :(得分:2)
如果没有正则表达式,这很容易做到:
(domain[0] != '.' != domain[-1] and
'..' not in domain and
'.' in domain)
如果您想要排除一般有两个或更多句号的案例,可以尝试:
domain[0] != '.' != domain[-1] and domain.count('.') == 1
答案 2 :(得分:1)
你在第二个点之前错过了\
;将and
更改为or
:
if re.search(r'^\.|\.$', domain) or re.search(r'\.\.', domain):