Regex trong Python: tìm kiếm và xử lý chuỗi với module re

Khi cần tìm một mẫu chuỗi phức tạp — email, số điện thoại, mã đơn hàng — vòng lặp và if sẽ rất dài dòng. Regex (biểu thức chính quy) giải quyết việc đó trong một dòng.

Bốn hàm cần nhớ

import re

van_ban = "Liên hệ: [email protected] hoặc [email protected]"

re.search(r"\w+@\w+\.\w+", van_ban)   # tìm kết quả đầu tiên
re.findall(r"\w+@[\w.]+", van_ban)      # lấy tất cả -> list
re.sub(r"\w+@[\w.]+", "[ẩn]", van_ban)  # thay thế
re.split(r"[,;]\s*", "a, b; c")         # tách chuỗi

Các ký hiệu thường dùng

  • \d chữ số, \w chữ cái/số/gạch dưới, \s khoảng trắng
  • + một hoặc nhiều, * không hoặc nhiều, ? có hoặc không
  • ^ đầu chuỗi, $ cuối chuỗi
  • [abc] một trong các ký tự, {2,4} lặp từ 2 đến 4 lần

Nhóm bắt: lấy ra từng phần

ngay = "15/08/2026"
m = re.match(r"(\d{2})/(\d{2})/(\d{4})", ngay)
print(m.group(1), m.group(2), m.group(3))  # 15 08 2026

# Đặt tên nhóm cho dễ đọc
m = re.match(r"(?P<ngay>\d{2})/(?P<thang>\d{2})/(?P<nam>\d{4})", ngay)
print(m.group("thang"))  # 08

Luôn dùng chuỗi raw

Viết r"\d+" thay vì "\d+". Tiền tố r báo Python đừng diễn giải dấu gạch chéo ngược, tránh lỗi khó tìm.

Biên dịch trước nếu dùng nhiều lần

mau_email = re.compile(r"[\w.]+@[\w.]+\.\w+")
for dong in danh_sach:
    if mau_email.search(dong):
        print(dong)

Khi nào đừng dùng regex

Regex mạnh nhưng khó đọc. Với việc đơn giản, các phương thức chuỗi vẫn tốt hơn: "abc".startswith("a") rõ ràng hơn re.match(r"^a", "abc"). Và tuyệt đối đừng phân tích HTML bằng regex — hãy dùng Beautiful Soup.

Mẹo học nhanh: dán mẫu của bạn lên regex101.com để xem từng ký hiệu khớp vào đâu trước khi đưa vào code.

Lên đầu trang