1

我正在尝试制作一个可以执行此操作的函数:

  • 确保.域的开头或结尾没有 a。
  • .确保域中没有两个。
  • .确保域中至少有一个。

就像 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
4

3 回答 3

3

.$应该是\.$and应该是orelse应该是elif,并且您应该添加一个 finalelse子句来处理完全没有点的域。

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

我建议重新组织一下逻辑。您可以将前两个reges合并为一个。您可以在一个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)
于 2013-08-15T17:45:44.393 回答
2

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

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

如果您想排除通常有两个或更多句点的案例,您可以尝试:

domain[0]  != '.' != domain[-1] and domain.count('.') == 1
于 2013-08-15T17:45:16.677 回答
1

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

if re.search(r'^\.|\.$', domain) or re.search(r'\.\.', domain):
于 2013-08-15T17:43:43.390 回答