Удаление нечисловых символов из строки в Python
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Чтобы быстро убрать нечисловые символы, можно использовать функцию re.sub()
из модуля re
:
import re
cleaned = re.sub(r'\D', '', 'example123')
В результате у вас останется '123'
в переменной cleaned
-- все цифры, убедитесь в этом (\D
соответствует символам, не являющимся числами).
Изучение регулярного выражения для удаления цифр
Регулярные выражения – это инструмент, умеющий многое, если речь идет о работе со строками. Важно понимать их синтаксис. Выражение r'\D'
подойдет, если вы хотите отловить все нечисловые символы. Если же вам нужно оставить десятичные точки, стоит использовать r'[^\d.]'
. Таким образом, в строке останутся числа с плавающей запятой, что может быть полезно при работе с десятичными значениями.
Чистка через фильтрацию
С помощью функций filter()
и str.isdigit()
можно достаточно прозрачно и понятно убрать нецифровые символы. Этот метод работает быстро и хорош как для Python 2, так и для Python 3:
numeric_string = ''.join(filter(str.isdigit, 'hello4me123'))
Работа с числами с плавающей точкой и отрицательными числами
Чтобы отфильтровать особые числовые конструкции, такие как числа с плавающей точкой или отрицательные числа, потребуются более сложные шаблоны. Чтобы оставить точки в десятичных числах и минусы, используйте следующую строку:
floats = re.sub(r'[^\d.-]', '', 'example-123.45')
Тем не менее, будьте осторожны: этот шаблон не исключает появление нескольких минусов или десятичных точек, это может привести к появлению некорректных чисел. Возможно, вам понадобится дополнительная фильтрация.
Извлечение нескольких чисел при помощи regex
Для поиска и извлечения чисел из строки модуль re
предлагает функцию re.finditer()
, которая возвращает итерируемый объект с найденными числами, что дает возможность подробного анализа:
numbers = [match.group() for match in re.finditer(r'-?\d+\.?\d*', 'level 123 and -456.78')]
Улучшение методов фильтрации
Чтобы увеличить производительность функции поиска, используйте frozenset()
. Это особенно заметно при работе с большими объемами данных, где каждая милисекунда важна:
from string import digits
allowed_chars = frozenset(digits)
cleaned = ''.join(filter(allowed_chars.__contains__, 'example 123'))
Визуализация
Представьте строку как цепочку, где каждый элемент символизирует разный тип символа:
До: 🔵🔢🔴🔢🟡🔢🟢
Символы 🔢 (цифры) окружены нецифровыми элементами (🔵🔴🟡🟢).
Наша задача — фильтровать все нецифровые элементы:
''.join(filter(str.isdigit, necklace))
После фильтрации останется только цепочка из цифр:
После: 🔢🔢🔢
Освобождение строковых констант Python
Модуль string
в Python содержит ряд постоянных строк, что очень полезно при работе с символами. Например, string.digits
включает все цифровые символы, что облегчает их поиск:
from string import digits
cleaned = ''.join(character for character in 'example123' if character in digits)
Этот подход можно применить к различным наборам символов, включая такие константы, как string.ascii_letters
или string.hexdigits
, в зависимости от потребностей.
Нестандартные числа и их обработка
Может встретиться нестандартный числовой формат, вроде римских цифр, валютных символов или научной нотации. Для их корректной обработки потребуются пользовательские шаблоны регулярных выражений, которые будут правильно распознавать данные значения и сохранять их.