Python:
Xóa các ký tự phù hợp với một mẫu
Cách thực hiện:
import re
# Chuỗi ví dụ
text = "Hello, World! 1234"
# Xóa tất cả các chữ số
no_digits = re.sub(r'\d', '', text)
print(no_digits) # Kết quả: "Hello, World! "
# Xóa dấu câu
no_punctuation = re.sub(r'[^\w\s]', '', text)
print(no_punctuation) # Kết quả: "Hello World 1234"
# Xóa nguyên âm
no_vowels = re.sub(r'[aeiouAEIOU]', '', text)
print(no_vowels) # Kết quả: "Hll, Wrld! 1234"
Hàm tùy chỉnh của tôi
Tôi thực hiện việc này đủ thường xuyên nên tôi đã tái cấu trúc nó thành hàm delete()
đơn giản này. Đây cũng là một ví dụ tốt về doctests:
def delete(string: str, regex: str) -> str:
"""
>>> delete("Hello, world!", "l")
'Heo, word!'
>>> delete("Hello, world!", "[a-z]")
'H, !'
"""
return re.sub(regex, "", string)
Sâu hơn
Thực hành xóa các ký tự khớp với một mẫu trong văn bản có nguồn gốc sâu xa trong khoa học máy tính, truy nguyên lại đến những công cụ Unix đầu tiên như sed
và grep
. Trong Python, module re
cung cấp khả năng này, tận dụng biểu thức chính quy - một công cụ mạnh mẽ và linh hoạt cho xử lí văn bản.
Các phương án thay thế cho module re
bao gồm:
- Các phương thức chuỗi như
replace()
cho các trường hợp đơn giản. - Các thư viện bên thứ ba như
regex
cho các mẫu phức tạp hơn và hỗ trợ Unicode tốt hơn.
Ở dưới cơ, khi bạn sử dụng re.sub()
, trình thông dịch Python biên dịch mẫu thành một loạt các bytecodes, được xử lý bởi một máy trạng thái thực hiện việc khớp mẫu trực tiếp trên văn bản đầu vào. Thao tác này có thể tốn tài nguyên với chuỗi lớn hoặc mẫu phức tạp, vì vậy việc cân nhắc về hiệu suất là rất quan trọng đối với việc xử lý dữ liệu lớn.
Xem thêm
- Tài liệu module
re
của Python: Tài liệu chính thức về biểu thức chính quy trong Python. - Regular-Expressions.info: Hướng dẫn toàn diện về biểu thức chính quy.
- Hướng dẫn về regex của Real Python: Ứng dụng thực tế của biểu thức chính quy trong Python.