Giới thiệu về Biểu Thức Chính Quy (Regex) trong Python
Biểu thức chính quy (Regular Expression hay Regex) là một công cụ mạnh mẽ để xử lý và tìm kiếm mẫu trong chuỗi văn bản. Chúng thường được sử dụng trong việc kiểm tra định dạng dữ liệu, trích xuất thông tin và thay thế văn bản.
Trong bài viết này, chúng ta sẽ tìm hiểu các cú pháp cơ bản và quan trọng của Regex khi làm việc với ngôn ngữ Python.
1. Cú pháp cơ bản của Regex
Các ký tự đặc biệt:
.
: Khớp với bất kỳ ký tự nào ngoại trừ xuống dòng.^
: Khớp với đầu chuỗi.$
: Khớp với cuối chuỗi.*
: Lặp lại 0 hoặc nhiều lần.+
: Lặp lại 1 hoặc nhiều lần.?
: Khớp 0 hoặc 1 lần.{n}
: Lặp lại chính xácn
lần.{n,}
: Lặp lại ít nhấtn
lần.{n,m}
: Lặp lại từn
đếnm
lần.|
: Hoặc (OR).()
: Nhóm biểu thức.
Các ký tự đại diện:
\d
: Chữ số (0-9).\D
: Không phải chữ số.\w
: Ký tự chữ cái, số và dấu gạch dưới[a-zA-Z0-9_]
.\W
: Không phải ký tự chữ cái, số hay dấu gạch dưới.\s
: Khoảng trắng.\S
: Không phải khoảng trắng.
Ví dụ:
import re
pattern = r"\d+"
text = "Có 123 con mèo và 456 con chó."
matches = re.findall(pattern, text)
print(matches) # Kết quả: ['123', '456']
2. Các hàm quan trọng trong thư viện re
re.match()
- Kiểm tra từ đầu chuỗi:
match = re.match(r"\d+", "123abc")
if match:
print("Khớp:", match.group())
re.search()
- Tìm kiếm trong toàn bộ chuỗi:
match = re.search(r"\d+", "abc123def")
if match:
print("Khớp:", match.group())
re.findall()
- Tìm tất cả các kết quả khớp:
matches = re.findall(r"\d+", "abc123def456")
print(matches) # Kết quả: ['123', '456']
re.finditer()
- Trả về iterator với đầy đủ thông tin:
for match in re.finditer(r"\d+", "abc123def456"):
print(f"Khớp: {match.group()} tại vị trí {match.start()}-{match.end()}")
re.sub()
- Thay thế văn bản:
text = re.sub(r"\d+", "###", "abc123def456")
print(text) # Kết quả: abc###def###
3. Cách sử dụng nhóm (Groups)
(abc|def)
: Khớpabc
hoặcdef
.(?:abc)
: Nhóm không lưu kết quả.
Ví dụ:
pattern = r"(abc|def)\d+"
text = "abc123 ghi def456"
matches = re.findall(pattern, text)
print(matches) # Kết quả: ['abc', 'def']
4. Ví dụ thực tế
Kiểm tra địa chỉ email hợp lệ:
pattern = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
email = "example@gmail.com"
if re.match(pattern, email):
print("Email hợp lệ")
else:
print("Email không hợp lệ")
Kiểm tra số điện thoại Việt Nam:
pattern = r"(0[3|5|7|8|9])+([0-9]{8})\b"
phone_number = "0987654321"
if re.match(pattern, phone_number):
print("Số điện thoại hợp lệ")
else:
print("Số điện thoại không hợp lệ")
5. Kết luận
Biểu thức chính quy là một công cụ cực kỳ hữu ích trong Python khi cần xử lý chuỗi văn bản phức tạp. Bằng cách nắm vững các cú pháp và hàm cơ bản, bạn có thể thực hiện các tác vụ như kiểm tra định dạng, trích xuất và thay thế dữ liệu một cách hiệu quả.
Hãy bắt đầu thử nghiệm với các mẫu regex trong dự án của bạn để làm việc với dữ liệu linh hoạt hơn!