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

Cách trích xuất dữ liệu từ chuỗi bằng Python Regular Expressions

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ứcMô 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ùng search() 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.