Xóa các ký tự phù hợp với một mẫu

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ư sedgrep. 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