Backslash \ là metacharacter quan trọng nhất trong regex: dùng để escape metacharacters và tạo special sequences (như \d, \w, \s...).
Vấn đề: Backslash trong Python String vs Regex
- Python string:
\\= một backslash thực. - Regex engine:
\\= escape backslash,\d= digit. - → Cần
\\\\trong normal string để ra\\cho regex.
Giải pháp: Raw String r'...'
Raw string không xử lý escape, backslash giữ nguyên.
# Hai cách viết tương đương:
re.match(r'\\', r'\\') # Raw string: pattern=\\, input=\\
re.match('\\\\', '\\\\') # Normal string: pattern=\\, input=\\
# Khớp literal backslash
re.match(r'\\\\', r'\\') # Pattern=\\, input=\\ -> Match!
Ví dụ minh họa
import re
# Không raw string: \d trong string thành 'd' (escape d vô nghĩa)
print(re.search('\d', r'\d')) # None - pattern 'd' không khớp '\d'
# Raw string: \d giữ nguyên -> regex sequence digit
print(re.search(r'\d', r'\d')) # Match object - pattern \d khớp '\d' (không, \d khớp digit)
# Sửa: khớp literal '\d'
print(re.search(r'\\d', r'\d')) # Match! Pattern \\d = literal \d
print(re.search('\\\\d', '\\d')) # Tương đương normal string
Kết quả
None
<_sre.SRE_Match object...>
<_sre.SRE_Match object...>
Bảng Special Sequences (cần backslash)
| Sequence | Ý nghĩa |
|---|---|
\d | Digit [0-9] |
\D | Non-digit [^0-9] |
\w | Word char [a-zA-Z0-9_] |
\W | Non-word [^a-zA-Z0-9_] |
\s | Whitespace [ \t\n\r\f\v] |
\S | Non-whitespace |
\b | Word boundary |
\B | Non-word boundary |
\A | Start of string |
\Z | End of string |
\\ | Literal backslash |
Best Practice
Luôn dùng raw string r'...' cho regex pattern. Tránh nhầm lẫn escape Python vs escape Regex.