Regex dùng backslash \ để escape metacharacters. Trong Python string, backslash cũng là escape character → xung đột. Giải pháp: Raw String r'...'.
Vấn đề: Double Escaping
- Regex cần
\\để khớp 1 backslash literal. - Python string cần
\\\\để biểu diễn\\. - → Normal string:
'\\\\\\\\'(4 backslashes) cho 1 literal backslash match.
Giải pháp: Raw String r'...'
Raw string không xử lý escape sequence, backslash giữ nguyên.
# Khớp literal backslash '\'
# Raw string: chỉ cần 2 backslashes
pattern = r'\\'
text = r'\'
re.match(pattern, text) # Match!
# Normal string: cần 4 backslashes
pattern = '\\\\'
text = '\\'
re.match(pattern, text) # Match!
So sánh
| Mục tiêu | Raw String | Normal String |
|---|---|---|
Regex \d (digit) | r'\d' | '\\d' |
Regex \\ (literal \) | r'\\\\' | '\\\\\\\\' |
Regex \. (literal .) | r'\.' | '\\.' |
Regex \n (newline) | r'\n' (2 chars: \ + n) | '\n' (1 char: newline) |
Best Practice
LUÔN dùng raw string r'...' cho regex pattern.
# TỐT
pattern = r'\d{3}-\d{4}'
pattern = r'[a-z]+'
pattern = r'\\server\share'
# TRÁNH
pattern = '\\d{3}-\\d{4}'
pattern = '[a-z]+'
pattern = '\\\\server\\\\share'
Khi nào KHÔNG dùng raw string
- Cần interpolate variable chứa regex fragment (dùng f-string + re.escape).
- Cần actual newline/tab trong pattern (hiếm).