Cách sử dụng biểu thức chính quy (Regex) trong Python

Nắm vững các biểu thức chính quy của Python bằng cách sử dụng mô-đun re tích hợp sẵn. Tìm hiểu cách so khớp chuỗi, tìm kiếm mẫu, tìm tất cả các lần xuất hiện và thay thế văn bản.

Hãy thử Giải pháp này trong Trình chỉnh sửa

Tổng quan

Biểu thức chính quy, thường được gọi là biểu thức chính quy, là các mẫu mạnh mẽ được sử dụng để khớp, tìm kiếm và thao tác với chuỗi văn bản dựa trên các mẫu cụ thể. Regex được sử dụng rộng rãi để xác minh email, xác thực số điện thoại, quét web, phân tích nhật ký và các tác vụ văn bản tìm kiếm và thay thế. Python cung cấp đầy đủ khả năng biểu thức chính quy thông qua mô-đun `re` tích hợp sẵn.

Mô-đun `re` cung cấp một số chức năng chính tùy thuộc vào mục tiêu của bạn. Hàm `re.search(pattern, string)` quét một chuỗi và trả về một đối tượng khớp cho lần xuất hiện đầu tiên của mẫu. Hàm `re.match(pattern, string)` cũng tương tự nhưng chỉ tìm kiếm từ đầu chuỗi. Nếu bạn muốn truy xuất tất cả các phiên bản của một mẫu trong một khối văn bản, `re.findall(pattern, string)` trả về chúng dưới dạng danh sách các chuỗi.

Các mẫu biểu thức chính quy sử dụng các siêu ký tự đặc biệt như `\d` cho các chữ số, `\w` cho các ký tự chữ và số, `+` cho một hoặc nhiều lần xuất hiện và `*` cho 0 hoặc nhiều lần xuất hiện. Khi viết biểu thức chính quy bằng Python, thông lệ tiêu chuẩn là sử dụng các chuỗi ký tự thô (có tiền tố là `r`, chẳng hạn như `r"\d+"`) để ngăn Python coi dấu gạch chéo ngược là chuỗi thoát.

Đầu ra mã & thực thi

Tập lệnh này thể hiện việc xác thực cấu trúc định dạng, trích xuất mã thông báo số và thay thế các mẫu phù hợp bằng mô-đun re.

import re

# 1. Searching for a pattern in text
log_message = "ERROR: Connection timeout at 04:30:15 on port 8080"
pattern_port = r"port \d+"

match = re.search(pattern_port, log_message)
if match:
    print("Found port pattern:", match.group())

# 2. Extracting all email addresses from a block of text
text = "Contact sales@pyrun.xyz or support@example.com for help."
pattern_email = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"

emails = re.findall(pattern_email, text)
print("Extracted emails:", emails)

# 3. Replacing patterns using re.sub
date_string = "2026/05/25"
# Replace slashes with dashes
clean_date = re.sub(r"/", "-", date_string)
print("Replaced Date:", clean_date)
Đầu ra thiết bị đầu cuối
Found port pattern: port 8080
Extracted emails: ['sales@pyrun.xyz', 'support@example.com']
Replaced Date: 2026-05-25

Triển khai từng bước

  • Nhập mô-đun re tích hợp sẵn.
  • Xác định các mẫu tìm kiếm biểu thức chính quy bằng cách sử dụng các chuỗi thô, như r"\d+" để tránh các vấn đề về chuỗi thoát.
  • Sử dụng re.search() để tìm lần xuất hiện đầu tiên hoặc re.findall() để thu thập tất cả các chuỗi con phù hợp.
  • Sử dụng re.sub(pattern, replacement, string) để thực hiện thay thế dựa trên mẫu bên trong văn bản.

Câu hỏi thường gặp

Lợi ích của việc sử dụng chuỗi thô (r"...") cho mẫu biểu thức chính quy là gì?

Chuỗi thô coi dấu gạch chéo ngược là ký tự chữ thay vì ký tự thoát. Ví dụ: r"\n" đại diện cho dấu gạch chéo ngược theo sau là "n", trong khi "\n" đại diện cho ký tự dòng mới.

Làm cách nào để kiểm tra xem kết hợp biểu thức chính quy có thành công hay không?

re.search() và re.match() trả về một đối tượng khớp nếu thành công hoặc Không có nếu không tìm thấy kết quả khớp nào. Bạn nên kiểm tra kết quả bằng cách sử dụng câu lệnh có điều kiện (ví dụ: nếu khớp :).

Chủ đề liên quan

Tài nguyên Python được đề xuất

Mở rộng kiến thức của bạn với các hướng dẫn tương tác, bảng ghi chú và so sánh mã có liên quan.