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 компілює патерн в серію байткодів, обробляються становою машиною, яка виконує підбір патернів безпосередньо на вхідному тексті. Ця операція може бути ресурсомісткою для великих рядків або складних патернів, тому питання про продуктивність є важливим для обробки великих даних.
Дивіться також
- Документація модуля
re
Python: Офіційна документація для регулярних виразів у Python. - Regular-Expressions.info: Всебічний посібник з регулярних виразів.
- Туторіал Real Python про regex: Реальні приклади використання регулярних виразів у Python.