Dùng re.match() hoặc re.search() với capturing groups (...) để trích xuất các thành phần từ chuỗi có cấu trúc.
Ví dụ: Parse mã sản phẩm
import re
s = 'TS001B01.JPG'
# Pattern: TS + digits (group 1), A hoặc B (group 2), digits (group 3), .JPG
match = re.match(r'(TS\d+)([A|B])(\d+)\.JPG', s)
if match:
first_id = match.group(1) # TS001
category = match.group(2) # B
second_id = match.group(3) # 01
print(first_id)
print(category)
print(second_id)
Kết quả
TS001
B
01
Cách truy cập Groups
| Phương thức | Mô tả |
|---|---|
match.group(0) | Toàn bộ match |
match.group(1) | Group 1 |
match.group('name') | Named group |
match.groups() | Tuple tất cả groups (1...) |
match.groupdict() | Dict named groups |
Best Practice: Dùng Named Groups
pattern = r'(?PTS\d+)(?P[AB])(?P\d+)\.JPG'
match = re.match(pattern, s)
if match:
print(match.group('prefix')) # TS001
print(match.group('cat')) # B
print(match.group('num')) # 01
print(match.groupdict()) # {'prefix': 'TS001', 'cat': 'B', 'num': '01'}
re.findall() cho nhiều matches
text = 'TS001B01.JPG TS002A05.JPG TS003B10.JPG'
pattern = r'(TS\d+)([AB])(\d+)\.JPG'
results = re.findall(pattern, text)
# [('TS001', 'B', '01'), ('TS002', 'A', '05'), ('TS003', 'B', '10')]
Lưu ý
match()chỉ khớp từ đầu string. Dùngsearch()nếu pattern ở giữa.- Luôn check
if match:trước khi truy cập.group()(tránh AttributeError khi None). - Dùng raw string
r'...'cho pattern.