如何使用正则表达式在 Python 中验证电子邮件地址

2024 年 8 月 29 日 | 4 分钟阅读

本教程将教我们如何使用正则表达式来验证给定的电子邮件地址。正则表达式是一种重要的文本搜索和替换技术,用于验证、字符串拆分以及许多其他操作。它们提供了一组规则来识别特定字符和数字,以便模式能够匹配我们正在寻找的特定文本片段。

正则表达式以模式匹配而闻名,各种编程语言都有不同的接口来表示它们以匹配结果。

让我们看看如何编写电子邮件验证的正则表达式。

通用电子邮件正则表达式

没有一个正则表达式可以匹配所有可能的有效电子邮件地址。尽管如此,我们可以编写一个正则表达式来匹配大多数有效的电子邮件地址。首先,我们必须定义我们正在寻找的电子邮件地址格式。以下是最常见的电子邮件格式。

因此,我们可以注意到 @ 符号将前缀与域段分开的模式。用户名是包含大写和小写字母、数字和一些特殊字符的有效字符串。

域名是一个顶级域名,由 .(点)符号分隔。域名也可以包含大写、小写字母和 -(连字符)符号。顶级域名可以是 com、in、edu、co,或者至少有两个字符长。

正则表达式可能如下所示。

(string1)@(string2).(2+个字符)

上面的表达式准确地匹配了下面的电子邮件。

相同的正则表达式可能无法匹配以下类型的电子邮件地址。

根据正则表达式,字符串不应包含特殊字符。此外,顶级域名不能无效。我们可以将这些规则纳入具体的表达式中,该表达式考虑了比第一个表示法更多的案例。

我们不能在 @ 符号之前直接使用前缀,前缀也不能以它开头,因此我们确保在每个特殊字符之前至少有一个字母数字字符。顶级域名可以用点分隔。

这个正则表达式比第一个要复杂,但它覆盖了我们定义的正则表达式的所有规则。然而,它仍然可能在一些边缘情况下失败。

使用 Python 验证电子邮件地址

Python 提供了 re 模块,其中包含用于在 Python 中表示和使用正则表达式的类和方法。我们将在 Python 脚本中使用此模块以及 re.fullmatch(pattern, string, flags)。仅当整个字符串与模式匹配时,此方法才返回匹配对象。如果不匹配,则返回 None。让我们了解下面的 Python 代码。

示例 -

输出

The given mail is valid
The given mail is valid
The given mail is invalid
The given mail is invalid

解释 -

在上面的代码中,我们使用了 compile() 方法,它将正则表达式模式编译成一个 regex 对象。当我们尝试多次匹配模式时,通常出于效率原因使用它。然后我们定义一个函数,该函数使用 re.fullmatch() 方法,该方法以 regex 和 email 作为参数,如果给定的邮件完全匹配,它将返回匹配对象并打印消息。

健壮的电子邮件正则表达式

之前,我们编写了一个在大多数情况下都有效的正则表达式,并且适用于合理的应用程序。但是,我们可以编写更健壮的正则表达式。长的表达式往往会变得复杂且难以阅读,这个表达式也不例外。

现在我们来编写健壮的电子邮件验证脚本。让我们了解下面的示例。

示例 -

输出

The given mail is valid
The given mail is valid
The given mail is invalid
The given mail is invalid

结论

本教程通过正则表达式包含了多种验证电子邮件的方法,主要取决于我们正在寻找的特定格式。关于这一点,没有一个唯一的模式适用于所有电子邮件格式;我们需要定义我们希望格式遵循的规则,并相应地构建模式。

每个新规则都会减小可接受地址的自由度。


下一主题bPython 入门