re.match() và re.search() đều tìm pattern trong string, nhưng phạm vi tìm kiếm khác nhau.
re.match() - Chỉ khớp ở ĐẦU chuỗi
- Chỉ kiểm tra pattern có khớp từ vị trí 0 của string.
- Trả về Match object nếu khớp,
Nonenếu không.
import re
text = 'TP Tutorials Point TP'
result = re.match(r'TP', text)
print(result.group()) # 'TP' - khớp ở đầu
result = re.match(r'Tutorials', text)
print(result) # None - không khớp ở đầu
re.search() - Khớp ở BẤT KỲ VỊ TRÍ NÀO
- Quét toàn bộ string, trả về match đầu tiên tìm thấy.
- Linh hoạt hơn
match().
result = re.search(r'Tutorials', text)
print(result.group()) # 'Tutorials' - tìm thấy ở giữa
result = re.search(r'TP', text)
print(result.group()) # 'TP' - match đầu tiên (ở đầu)
So sánh nhanh
| Phương thức | Phạm vi | Trường hợp dùng |
|---|---|---|
re.match(pattern, s) | Chỉ đầu string (index 0) | Validate format, parse header, prefix check |
re.search(pattern, s) | Toàn bộ string | Tìm pattern bất kỳ đâu, extract data |
re.findall(pattern, s) | Toàn bộ string | Lấy TẤT CẢ matches (list) |
re.finditer(pattern, s) | Toàn bộ string | Iterator Match objects (vị trí, group) |
Mẹo: Giả lập match() bằng search()
# Tương đương re.match(pattern, s)
re.search(r'\A' + pattern, s) # \A = bắt đầu string tuyệt đối
Kết luận
- Dùng
search()cho hầu hết trường hợp tìm kiếm. - Dùng
match()khi chắc chắn pattern phải ở đầu (validate). - Dùng
findall()/finditer()khi cần tất cả matches.