Видалення символів, що відповідають патерну

Python:
Видалення символів, що відповідають патерну

Як це зробити:

import re

# Приклад рядка
text = "Hello, World! 1234"

# Видалення всіх цифр
no_digits = re.sub(r'\d', '', text)
print(no_digits)  # Вивід: "Hello, World! "

# Видалення пунктуації
no_punctuation = re.sub(r'[^\w\s]', '', text)
print(no_punctuation)  # Вивід: "Hello World 1234"

# Видалення голосних
no_vowels = re.sub(r'[aeiouAEIOU]', '', text)
print(no_vowels)  # Вивід: "Hll, Wrld! 1234"

Моя власна функція

Я роблю це досить часто, тому я рефакторив це в просту функцію delete(). Це також гарний приклад використання 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)

Поглиблений огляд

Практика видалення символів, що відповідають патерну в тексті, має глибокі коріння в інформатиці, що сходить до ранніх інструментів Unix, таких як sed та grep. У Python модуль re надає цю можливість, використовуючи регулярні вирази – потужний і універсальний інструмент для обробки тексту.

Альтернативи модулю re включають:

  • Методи рядків, такі як replace(), для простих випадків.
  • Сторонні бібліотеки, такі як regex, для більш складних патернів і кращої підтримки Unicode.

За лаштунками, коли ви використовуєте re.sub(), інтерпретатор Python компілює патерн в серію байткодів, обробляються становою машиною, яка виконує підбір патернів безпосередньо на вхідному тексті. Ця операція може бути ресурсомісткою для великих рядків або складних патернів, тому питання про продуктивність є важливим для обробки великих даних.

Дивіться також