re ModulePython regular expressions let you search, validate, and extract structured text patterns using the built-in re module. Common uses include parsing log lines, validating product codes, and pulling dates or IDs out of messy text.
Always write regex patterns as raw strings (r"...") so Python passes backslashes like \d and \s straight to the regex engine instead of treating them as string escapes.
re Functions: search, match, and findallre.search() scans the whole string for the first match, re.match() checks only the very start of the string, and re.findall() returns a list of every match.
import re
log_line = "Order #4821 shipped to user_id=904 in 2 days"
order_match = re.search(r"#(\d+)", log_line)
all_numbers = re.findall(r"\d+", log_line)
if order_match:
print("Order ID:", order_match.group(1))
print("All numbers:", all_numbers) # ['4821', '904', '2']
Regex engines combine literal characters with quantifiers and anchors so you match exact shapes without false positives. Use ^ and $ to pin matches to string boundaries, and wrap sub-patterns in parentheses (...) to capture specific groups cleanly via match.group(1).
| Token | Meaning | Example Match |
|---|---|---|
\d / \w |
Digit (0-9) / Word char |
7, a_1 |
\s |
Whitespace (space, tab) | " " |
+ / * / ? |
1+, 0+, or 0-or-1 repeats | \d+ matches 42 |
^ / $ |
Start / End of string | ^OK$ |
When you want to replace matched substrings cleanly, pass a pattern, replacement string, and target text to re.sub(). For example, re.sub(r"[^a-z0-9-]+", "-", slug) normalizes messy titles into clean URL slugs in one line.
r"..."): Writing "\bword\b" turns \b into an ASCII backspace character instead of a word boundary.re.match() when you meant re.search(): re.match() fails if your pattern appears in the middle of the text.text.startswith("https://") or "@" in email is faster and clearer than compiling a regex.re.search() return when nothing matches?It returns None. Always check if match: before calling match.group(0) to avoid AttributeError.
Call re.sub(r"\s+", " ", messy_text) to collapse repeated spaces into a single space.
. match newline characters?No, by default . matches every character except
. Pass re.DOTALL if . must span multiple lines.
Sign in to track your learning journey, earn industry-recognized certificates, and join our elite developer community.
Quick Access With
Experiment with the code from this lesson in our interactive playground.