ZetCode

Python re.fullmatch() 函数

最后修改于 2025 年 4 月 20 日

re.fullmatch 简介

re.fullmatch 函数是 Python 的 re 模块中的一个强大工具。 它检查整个字符串是否与正则表达式模式匹配。

与在字符串中任何位置查找匹配项的 re.search 不同,re.fullmatch 要求整个字符串都匹配。 这使其成为验证任务的理想选择。

如果模式与整个字符串匹配,则该函数返回一个匹配对象,如果模式不匹配,则返回 None。 它接受已编译的模式和模式字符串。

基本语法

re.fullmatch 的语法很简单

re.fullmatch(pattern, string, flags=0)

pattern 是要匹配的正则表达式。 string 是要检查的文本。 可选的 flags 修改匹配行为。

基本完整匹配示例

让我们从验证字符串格式的简单示例开始。

basic_fullmatch.py
#!/usr/bin/python

import re

pattern = r'hello'
text1 = "hello"
text2 = "hello world"

match1 = re.fullmatch(pattern, text1)
match2 = re.fullmatch(pattern, text2)

print(f"Text1 match: {match1 is not None}")
print(f"Text2 match: {match2 is not None}")

此示例显示了 re.fullmatch 与其他匹配函数的不同之处。 只有完全匹配才能成功。

match1 = re.fullmatch(pattern, text1)

这将返回一个匹配对象,因为 "hello" 完全匹配该模式。 整个字符串必须符合该模式。

match2 = re.fullmatch(pattern, text2)

这将返回 None,因为 "hello world" 包含模式中没有的额外字符。 匹配必须完全。

验证电子邮件格式

re.fullmatch 非常适合验证结构化数据。 这是一个电子邮件验证器。

email_validation.py
#!/usr/bin/python

import re

email_pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
emails = ["user@example.com", "invalid.email", "name@domain.co.uk"]

for email in emails:
    if re.fullmatch(email_pattern, email):
        print(f"Valid email: {email}")
    else:
        print(f"Invalid email: {email}")

这演示了使用 re.fullmatch 进行输入验证。 模式必须匹配整个字符串才能被视为有效。

匹配整数

以下是如何验证字符串是否仅包含数字。

number_validation.py
#!/usr/bin/python

import re

numbers = ["123", "45.67", "1000", "abc123"]
pattern = r'^\d+$'

for num in numbers:
    if re.fullmatch(pattern, num):
        print(f"Valid number: {num}")
    else:
        print(f"Invalid number: {num}")

模式 ^\d+$ 确保字符串仅包含从头到尾的一个或多个数字。 不允许使用其他字符。

与已编译模式一起使用

为了在重复使用时获得更好的性能,请首先编译该模式。

compiled_pattern.py
#!/usr/bin/python

import re

date_pattern = re.compile(r'^\d{4}-\d{2}-\d{2}$')
dates = ["2023-12-25", "12/25/2023", "2023-13-01"]

for date in dates:
    if date_pattern.fullmatch(date):
        print(f"Valid date: {date}")
    else:
        print(f"Invalid date: {date}")

已编译的模式有一个 fullmatch 方法,其工作方式与模块级别的函数相同。 这对于重复验证更有效。

密码强度检查器

结合多个条件来验证密码强度。

password_checker.py
#!/usr/bin/python

import re

password_pattern = r'^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$'
passwords = ["Weak1", "Strong@123", "noSpecialChar1"]

for pwd in passwords:
    if re.fullmatch(password_pattern, pwd):
        print(f"Strong password: {pwd}")
    else:
        print(f"Weak password: {pwd}")

此模式要求至少包含一个大写字母、小写字母、数字和特殊字符,且最小长度为 8。 re.fullmatch 确保整个密码满足所有要求。

十六进制颜色代码验证

使用 re.fullmatch 验证 CSS 样式的十六进制颜色代码。

color_validation.py
#!/usr/bin/python

import re

color_pattern = r'^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$'
colors = ["#FF5733", "#abc", "#123456", "#ghijkl"]

for color in colors:
    if re.fullmatch(color_pattern, color):
        print(f"Valid color: {color}")
    else:
        print(f"Invalid color: {color}")

该模式匹配 3 位和 6 位十六进制颜色代码。 ^$ 锚点确保不存在额外的字符。

时间格式验证

验证 24 小时时间格式(带有可选的秒数)。

time_validation.py
#!/usr/bin/python

import re

time_pattern = r'^([01]?[0-9]|2[0-3]):[0-5][0-9](:[0-5][0-9])?$'
times = ["13:45", "23:59:59", "25:00", "12:60"]

for time in times:
    if re.fullmatch(time_pattern, time):
        print(f"Valid time: {time}")
    else:
        print(f"Invalid time: {time}")

此模式验证小时(00-23)、分钟(00-59)和可选的秒(00-59)。 re.fullmatch 确保整个字符串符合时间格式。

最佳实践

使用 re.fullmatch 时,请遵循以下最佳实践

性能注意事项

re.fullmatch 针对其特定用例进行了优化。 对于简单的验证,它通常是最有效的方法。

当针对同一模式验证多个字符串时,首先编译该模式可提供更好的性能。 这种差异在紧密循环中最明显。

来源

Python re.fullmatch() 文档

本教程涵盖了 Python 的 re.fullmatch 函数的基本方面。 掌握完整模式匹配将使您的验证代码更加健壮和高效。

作者

我叫 Jan Bodnar,是一位充满激情的程序员,拥有丰富的编程经验。 我自 2007 年以来一直在撰写编程文章。 迄今为止,我已经撰写了超过 1,400 篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有 Python 教程