Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

So sánh re.search() vs re.match() trong Python Regex

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, None nế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ứcPhạm viTrườ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ộ stringTìm pattern bất kỳ đâu, extract data
re.findall(pattern, s)Toàn bộ stringLấy TẤT CẢ matches (list)
re.finditer(pattern, s)Toàn bộ stringIterator 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.