🌱 Junior Track 29 of 30

29. Regular Expressions (regex)

Perform pattern matching, text search, extraction, and string validation using Python's built-in `re` module. Master character classes, quantifiers, capturing groups, `re.search()`, `re.findall()`, `re.sub()`, and learn when simpler Python string methods are preferred.

👁️ Views: 0
# ==============================================================================
# JUNIOR PYTHON TRACK 29 — REGULAR EXPRESSIONS (re)
# ==============================================================================
import re

# 1. Matching & Searching (`re.search` vs `re.match`)
log_line = "2026-09-20 20:50:00 [ERROR] User 404 failed login attempt from 192.168.1.5"

# re.search scans string for first location matching pattern
ip_match = re.search(r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", log_line)
ip_address = ip_match.group() if ip_match else "Not found"


# 2. Capturing Groups & Named Groups (`re.search` with groups)
log_pattern = r"(?P<timestamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) \[(?P<level>\w+)\] (?P<msg>.*)"
parsed_log = re.search(log_pattern, log_line)

if parsed_log:
    log_dict = parsed_log.groupdict()
    # log_dict -> {'timestamp': '2026-09-20 20:50:00', 'level': 'ERROR', 'msg': 'User 404 failed...'}


# 3. Find All & Substitution (`re.findall` & `re.sub`)
text = "Contact support at dev@example.com or admin@teachcloud.org for help."
emails = re.findall(r"[\w\.-]+@[\w\.-]+\.\w+", text)

# Redact emails for privacy
redacted_text = re.sub(r"[\w\.-]+@[\w\.-]+\.\w+", "[REDACTED_EMAIL]", text)


# 4. Strict Validation Function
def validate_username(username: str) -> bool:
    """Usernames must be 3-16 chars, lowercase alphanumeric, underscore or hyphen."""
    pattern = r"^[a-z0-9_-]{3,16}$"
    return bool(re.match(pattern, username))


# 💡 GOLDEN RULE: Don't use regex when simpler Python string methods work!
def is_csv_file(filename: str) -> bool:
    # ❌ BAD: re.search(r'\.csv$', filename)
    # ✅ GOOD: Simpler, faster, cleaner
    return filename.endswith(".csv")


if __name__ == "__main__":
    print("=== 1. IP Search Result ===")
    print(f"Extracted IP: {ip_address}")

    print("\n=== 2. Log Line Groups ===")
    print(f"Log Level: {parsed_log.group('level') if parsed_log else 'N/A'}")

    print("\n=== 3. Extracted Emails ===")
    print(emails)

    print("\n=== 4. Redacted Text ===")
    print(redacted_text)

    print("\n=== 5. Username Validation ===")
    print(f"'shkar_dev' valid: {validate_username('shkar_dev')}")
    print("'Invalid User!' valid: {validate_username('Invalid User!')}")
🌱 Junior Track 29 Master Reference

29. Regular Expressions (regex) Cheatsheet & Python `re` Functions

🛠️ Standard `re` Module Functions

Function Description Returns
re.search(pattern, str) Scan string for the first matching location `Match` object or `None`
re.match(pattern, str) Check match ONLY at start of string `Match` object or `None`
re.findall(pattern, str) Find all non-overlapping matches `list` of strings/tuples
re.finditer(pattern, str) Iterate over all match objects lazily `callable_iterator` of `Match`
re.sub(pattern, repl, str) Replace matched patterns with replacement string Modified `str`

🔤 Regex Symbols, Character Classes & Quantifiers

Symbol Meaning Example Pattern Matches
\d / \D Digit `[0-9]` / Non-digit r"\d{3}" "404", "101"
\w / \W Word char `[a-zA-Z0-9_]` / Non-word r"\w+" "shkar_dev"
\s / \S Whitespace `[ \t\n\r]` / Non-whitespace r"\s+" " \t\n"
^ / $ Start of string / End of string r"^admin$" Exact string "admin"
+ / * / ? 1+ / 0+ / 0 or 1 optional r"https?" "http", "https"
(group) Capturing Group r"(\d+)-(\w+)" `group(1)`, `group(2)`

⭐ Rate Track 29: Regular Expressions (re) (1 to 5 Stars)

Your rating is stored directly in the database. Average: 5.0 / 5 (1 rating)

★ ★ ★ ★ ★
← 28. JSON & Data Processing 🌱 Junior Hub (30 Modules) Next Track: 30. Databases & SQL →