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 修改匹配行为。
基本完整匹配示例
让我们从验证字符串格式的简单示例开始。
#!/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 非常适合验证结构化数据。 这是一个电子邮件验证器。
#!/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 进行输入验证。 模式必须匹配整个字符串才能被视为有效。
匹配整数
以下是如何验证字符串是否仅包含数字。
#!/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+$ 确保字符串仅包含从头到尾的一个或多个数字。 不允许使用其他字符。
与已编译模式一起使用
为了在重复使用时获得更好的性能,请首先编译该模式。
#!/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 方法,其工作方式与模块级别的函数相同。 这对于重复验证更有效。
密码强度检查器
结合多个条件来验证密码强度。
#!/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 样式的十六进制颜色代码。
#!/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 小时时间格式(带有可选的秒数)。
#!/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 时,请遵循以下最佳实践
- 用于整个字符串必须匹配的验证任务
- 在验证多个字符串时,首选已编译的模式
- 与其他正则表达式功能(如前瞻)结合使用,以实现复杂的规则
- 始终对模式使用原始字符串(
r'') - 创建复杂模式时,请考虑可读性
性能注意事项
re.fullmatch 针对其特定用例进行了优化。 对于简单的验证,它通常是最有效的方法。
当针对同一模式验证多个字符串时,首先编译该模式可提供更好的性能。 这种差异在紧密循环中最明显。
来源
本教程涵盖了 Python 的 re.fullmatch 函数的基本方面。 掌握完整模式匹配将使您的验证代码更加健壮和高效。
作者
列出所有 Python 教程。