用于在电子邮件地址中查找点的Python正则表达式

时间:2013-08-15 17:41:59

标签: 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'\.\.', domain):
        return False
    else re.search(r'\.', domain):
        return True

3 个答案:

答案 0 :(得分:3)

.$应为\.$and应为orelse应该是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):