Python:
Удаление символов, соответствующих шаблону
Как это сделать:
import re
# Пример строки
text = "Привет, мир! 1234"
# Удаление всех цифр
bez_cifr = re.sub(r'\d', '', text)
print(bez_cifr) # Вывод: "Привет, мир! "
# Удаление пунктуации
bez_punktuacii = re.sub(r'[^\w\s]', '', text)
print(bez_punktuacii) # Вывод: "Привет мир 1234"
# Удаление гласных
bez_glasnyh = re.sub(r'[aeiouAEIOU]', '', text)
print(bez_glasnyh) # Вывод: "Првт, мр! 1234"
Моя пользовательская функция
Я делаю это достаточно часто, поэтому я рефакторил это в простую функцию delete()
. Это также хороший пример использования doctests:
def delete(string: str, regex: str) -> str:
"""
>>> delete("Привет, мир!", "л")
'Привет, мир!'
>>> delete("Привет, мир!", "[a-z]")
'П, !'
"""
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.