re.fullmatch() Method

Python re.fullmatch() Method Explained

The re.fullmatch() method checks if the entire string matches the regular expression pattern. It returns a match object if the whole string matches, or None if it doesn’t.

Syntax

python

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

# Target string
string = "The Euro STOXX 600 index, which tracks all stock markets across Europe including the FTSE, fell by 11.48% – the worst day since it launched in 1998. The panic selling prompted by the coronavirus has wiped £2.7tn off the value of STOXX 600 shares since its all-time peak on 19 February."

# Source: https://www.theguardian.com/

# Check if the entire string has exactly 285 characters
result = re.fullmatch(r".{285}", string)

print(f"String length: {len(string)} characters")
print(f"re.fullmatch result: {result}")

if result:
    print("✓ The string has exactly 285 characters")
else:
    print("✗ The string does NOT have exactly 285 characters")

# Display the actual matched portion (if any)
if result:
    print(f"\nMatched text: '{result.group()}'")

Output:

text

String length: 285 characters
re.fullmatch result: <re.Match object; span=(0, 285), match='The Euro STOXX 600 index, which tracks all stock >

✓ The string has exactly 285 characters

Matched text: 'The Euro STOXX 600 index, which tracks all stock markets across Europe including the FTSE, fell by 11.48% – the worst day since it launched in 1998. The panic selling prompted by the coronavirus has wiped £2.7tn off the value of STOXX 600 shares since its all-time peak on 19 February.'

In the code re.fullmatch(r".{285}", string), the dot (.) is a special regex character that matches any character except a newline (unless the re.DOTALL flag is used).

What r".{285}" means:

  • . – Matches any single character (except newline by default)
  • {285} – Specifies exactly 285 occurrences of the preceding element
  • So .{285} means “exactly 285 of any characters”

Python re.fullmatch() Method Explained

The re.fullmatch() method checks if the entire string matches the regular expression pattern. It returns a match object if the whole string matches, or None if it doesn’t.

Syntax

python

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

Example 1: Validating Email Format

python

import re

# Validate email format
emails = ["user@example.com", "invalid-email", "name@domain.co.uk", "short@a.b"]

for email in emails:
pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
match = re.fullmatch(pattern, email)

if match:
print(f"✓ Valid email: {email}")
else:
print(f"✗ Invalid email: {email}")
Let me break down this email validation regex pattern piece by piece:

Pattern: r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
1. ^ - Start of string anchor
Ensures the pattern matches from the very beginning

2. [a-zA-Z0-9._%+-]+ - Local part (before @)
[a-zA-Z0-9._%+-] - Character class matching:

Letters: a-z, A-Z

Digits: 0-9

Special characters: ., _, %, +, -

+ - One or more of these characters

3. @ - Literal @ symbol
Must contain exactly one @ symbol

4. [a-zA-Z0-9.-]+ - Domain name (after @)
[a-zA-Z0-9.-] - Character class matching:

Letters: a-z, A-Z

Digits: 0-9

Special characters: ., -

+ - One or more of these characters

5. \. - Literal dot (escaped)
The dot before TLD (must be escaped with \ because . is a regex metacharacter)

6. [a-zA-Z]{2,} - Top Level Domain (TLD)
[a-zA-Z] - Only letters allowed in TLD

{2,} - Two or more characters (e.g., .com, .org, .io)

7. $ - End of string anchor
Ensures the pattern matches to the very end

What this pattern validates:
text
username@domain.tld
Examples that match:
user@example.com

first.last@company.co.uk

name123@sub.domain.org

user_name+filter@domain.io

Examples that DON'T match:
user@com (TLD too short)

user@.com (domain part empty)

@domain.com (local part missing)

user@domain. (TLD missing)

user@domain.c (TLD too short)

user@-domain.com (hyphen at start of domain)

Visual Breakdown:
text
^[a-zA-Z0-9._%+-]+ @ [a-zA-Z0-9.-]+ \. [a-zA-Z]{2,} $
 │                  │ │               │ │             │
 │                  │ │               │ │             └── End of string
 │                  │ │               │ └── TLD (2+ letters)
 │                  │ │               └── Literal dot
 │                  │ └── Domain name (hostname)
 │                  └── Literal @ symbol
 └── Local part (username)
This is a commonly used email validation pattern that covers most standard email formats while being relatively strict about the structure.

Output:

text

✓ Valid email: user@example.com
✗ Invalid email: invalid-email
✓ Valid email: name@domain.co.uk
✗ Invalid email: short@a.b

Example 2: Password Validation

python

import re

# Validate password: 8+ chars, at least one uppercase, one lowercase, one digit, one special char
passwords = ["StrongP@ss1", "weak", "NoSpecialChar123", "Valid#Pass99"]

for pwd in passwords:
    pattern = r'^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$'
    match = re.fullmatch(pattern, pwd)
    
    if match:
        print(f"✓ Strong password: {pwd}")
    else:
        print(f"✗ Weak password: {pwd}")

Output:

text

✓ Strong password: StrongP@ss1
✗ Weak password: weak
✗ Weak password: NoSpecialChar123
✓ Strong password: Valid#Pass99

Example 3: Date Format Validation

python

import re

# Validate dates in YYYY-MM-DD format
dates = [
    "2023-12-25",
    "2023-02-30",  # Invalid date (February 30th)
    "23-12-25",    # Wrong format
    "2023-13-01",  # Invalid month
    "2023-12-25 extra"  # Extra characters
]

for date in dates:
    pattern = r'^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$'
    match = re.fullmatch(pattern, date)
    
    if match:
        print(f"✓ Valid date format: {date}")
    else:
        print(f"✗ Invalid date format: {date}")

Output:

text

✓ Valid date format: 2023-12-25
✓ Valid date format: 2023-02-30  # Note: Pattern validates format, not actual date validity
✗ Invalid date format: 23-12-25
✗ Invalid date format: 2023-13-01
✗ Invalid date format: 2023-12-25 extra

Key Differences from Other Methods

  • re.fullmatch(): Entire string must match pattern
  • re.match(): Pattern must match from the beginning of string
  • re.search(): Pattern can match anywhere in the string

python

import re

text = "abc123def"
pattern = r'\d+'

print("fullmatch:", re.fullmatch(pattern, text))  # None (entire string isn't digits)
print("match:", re.match(pattern, text))         # None (doesn't start with digits)
print("search:", re.search(pattern, text))       # Match object (finds '123')

The re.fullmatch() method is particularly useful for validation tasks where you need to ensure the entire input conforms to a specific pattern.

Similar Posts

  • Tuples

    In Python, a tuple is an ordered, immutable (unchangeable) collection of elements. Tuples are similar to lists, but unlike lists, they cannot be modified after creation (no adding, removing, or changing elements). Key Features of Tuples: Syntax: Tuples are defined using parentheses () (or without any brackets in some cases). python my_tuple = (1, 2, 3, “hello”) or (without…

  • recursive function

    A recursive function is a function that calls itself to solve a problem. It works by breaking down a larger problem into smaller, identical subproblems until it reaches a base case, which is a condition that stops the recursion and provides a solution to the simplest subproblem. The two main components of a recursive function…

  • Currency Converter

    Challenge: Currency Converter Class with Accessors & Mutators Objective: Create a CurrencyConverter class that converts an amount from a foreign currency to your local currency, using accessor and mutator methods. 1. Class Properties (Instance Variables) 2. Class Methods 3. Task Instructions

  • Static Methods

    The primary use of a static method in Python classes is to define a function that logically belongs to the class but doesn’t need access to the instance’s data (like self) or the class’s state (like cls). They are essentially regular functions that are grouped within a class namespace. Key Characteristics and Use Cases General…

  • Positional-Only Arguments in Python

    Positional-Only Arguments in Python Positional-only arguments are function parameters that must be passed by position (order) and cannot be passed by keyword name. Syntax Use the / symbol in the function definition to indicate that all parameters before it are positional-only: python def function_name(param1, param2, /, param3, param4): # function body Simple Examples Example 1: Basic Positional-Only Arguments python def calculate_area(length,…

  • Top Programming Languages and Tools Developed Using Python

    Python itself is not typically used to develop other programming languages, as it is a high-level language designed for general-purpose programming. However, Python has been used to create domain-specific languages (DSLs), tools for language development, and educational languages. Here are some examples: 1. Hy 2. Coconut Description: A functional programming language that compiles to Python. It adds…

Leave a Reply

Your email address will not be published. Required fields are marked *