Python re.fullmatch() Function
last modified April 20, 2025
Introduction to re.fullmatch
The re.fullmatch
function is a powerful tool in Python's
re
module. It checks if the entire string matches the
regular expression pattern.
Unlike re.search
which looks for matches anywhere in the
string, re.fullmatch
requires the entire string to match.
This makes it ideal for validation tasks.
The function returns a match object if the pattern matches the whole
string, or None
if it doesn't. It accepts both compiled
patterns and pattern strings.
Basic Syntax
The syntax for re.fullmatch
is straightforward:
re.fullmatch(pattern, string, flags=0)
The pattern
is the regular expression to match. The
string
is the text to check. Optional flags
modify matching behavior.
Basic Full Match Example
Let's start with a simple example of validating a string format.
#!/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}")
This example shows how re.fullmatch
differs from other
matching functions. Only the exact match succeeds.
match1 = re.fullmatch(pattern, text1)
This returns a match object because "hello" exactly matches the pattern. The entire string must conform to the pattern.
match2 = re.fullmatch(pattern, text2)
This returns None
because "hello world" contains extra
characters not in the pattern. The match must be exact.
Validating Email Format
re.fullmatch
is perfect for validating structured data.
Here's an email validator.
#!/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}")
This demonstrates using re.fullmatch
for input validation.
The pattern must match the entire string to be considered valid.
Matching Whole Numbers
Here's how to validate that a string contains only digits.
#!/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}")
The pattern ^\d+$
ensures the string contains only one
or more digits from start to end. No other characters are allowed.
Using with Compiled Patterns
For better performance with repeated use, compile the pattern first.
#!/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}")
Compiled patterns have a fullmatch
method that works
just like the module-level function. This is more efficient for
repeated validations.
Password Strength Checker
Combine multiple conditions to validate password strength.
#!/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}")
This pattern requires at least one uppercase, lowercase, digit, and
special character, with minimum length of 8. re.fullmatch
ensures the entire password meets all requirements.
Hex Color Code Validation
Validate CSS-style hex color codes with re.fullmatch
.
#!/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}")
The pattern matches both 3-digit and 6-digit hex color codes. The
^
and $
anchors ensure no extra characters
are present.
Time Format Validation
Validate 24-hour time format with optional seconds.
#!/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}")
This pattern validates hours (00-23), minutes (00-59), and optional
seconds (00-59). re.fullmatch
ensures the entire string
conforms to the time format.
Best Practices
When using re.fullmatch
, follow these best practices:
- Use for validation tasks where the entire string must match
- Prefer compiled patterns when validating multiple strings
- Combine with other regex features like lookaheads for complex rules
- Always use raw strings (
r''
) for patterns - Consider readability when creating complex patterns
Performance Considerations
re.fullmatch
is optimized for its specific use case.
For simple validations, it's often the most efficient approach.
When validating many strings against the same pattern, compiling the pattern first provides better performance. The difference is most noticeable in tight loops.
Source
Python re.fullmatch() documentation
This tutorial covered the essential aspects of Python's re.fullmatch
function. Mastering full pattern matching will make your validation code
more robust and efficient.
Author
List all Python tutorials.