Удаление нечисловых символов из строки в Python

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Чтобы быстро убрать нечисловые символы, можно использовать функцию re.sub() из модуля re:

Python
Скопировать код
import re
cleaned = re.sub(r'\D', '', 'example123')

В результате у вас останется '123' в переменной cleaned -- все цифры, убедитесь в этом (\D соответствует символам, не являющимся числами).

Кинга Идем в IT: пошаговый план для смены профессии

Изучение регулярного выражения для удаления цифр

Регулярные выражения – это инструмент, умеющий многое, если речь идет о работе со строками. Важно понимать их синтаксис. Выражение r'\D' подойдет, если вы хотите отловить все нечисловые символы. Если же вам нужно оставить десятичные точки, стоит использовать r'[^\d.]'. Таким образом, в строке останутся числа с плавающей запятой, что может быть полезно при работе с десятичными значениями.

Чистка через фильтрацию

С помощью функций filter() и str.isdigit() можно достаточно прозрачно и понятно убрать нецифровые символы. Этот метод работает быстро и хорош как для Python 2, так и для Python 3:

Python
Скопировать код
numeric_string = ''.join(filter(str.isdigit, 'hello4me123'))

Работа с числами с плавающей точкой и отрицательными числами

Чтобы отфильтровать особые числовые конструкции, такие как числа с плавающей точкой или отрицательные числа, потребуются более сложные шаблоны. Чтобы оставить точки в десятичных числах и минусы, используйте следующую строку:

Python
Скопировать код
floats = re.sub(r'[^\d.-]', '', 'example-123.45')

Тем не менее, будьте осторожны: этот шаблон не исключает появление нескольких минусов или десятичных точек, это может привести к появлению некорректных чисел. Возможно, вам понадобится дополнительная фильтрация.

Извлечение нескольких чисел при помощи regex

Для поиска и извлечения чисел из строки модуль re предлагает функцию re.finditer(), которая возвращает итерируемый объект с найденными числами, что дает возможность подробного анализа:

Python
Скопировать код
numbers = [match.group() for match in re.finditer(r'-?\d+\.?\d*', 'level 123 and -456.78')]

Улучшение методов фильтрации

Чтобы увеличить производительность функции поиска, используйте frozenset(). Это особенно заметно при работе с большими объемами данных, где каждая милисекунда важна:

Python
Скопировать код
from string import digits

allowed_chars = frozenset(digits)
cleaned = ''.join(filter(allowed_chars.__contains__, 'example 123'))

Визуализация

Представьте строку как цепочку, где каждый элемент символизирует разный тип символа:

Markdown
Скопировать код
До: 🔵🔢🔴🔢🟡🔢🟢

Символы 🔢 (цифры) окружены нецифровыми элементами (🔵🔴🟡🟢).

Наша задача — фильтровать все нецифровые элементы:

Python
Скопировать код
''.join(filter(str.isdigit, necklace))

После фильтрации останется только цепочка из цифр:

Markdown
Скопировать код
После: 🔢🔢🔢

Освобождение строковых констант Python

Модуль string в Python содержит ряд постоянных строк, что очень полезно при работе с символами. Например, string.digits включает все цифровые символы, что облегчает их поиск:

Python
Скопировать код
from string import digits

cleaned = ''.join(character for character in 'example123' if character in digits)

Этот подход можно применить к различным наборам символов, включая такие константы, как string.ascii_letters или string.hexdigits, в зависимости от потребностей.

Нестандартные числа и их обработка

Может встретиться нестандартный числовой формат, вроде римских цифр, валютных символов или научной нотации. Для их корректной обработки потребуются пользовательские шаблоны регулярных выражений, которые будут правильно распознавать данные значения и сохранять их.

Полезные материалы

  1. re — Регулярные выражения — Документация Python 3.12.2
  2. Регулярные выражения HOWTO — Документация Python 3.12.2
  3. Регулярные выражения: Regex в Python (Часть 1) – Real Python
  4. Методы строк Python
  5. Учебник Python: модуль re — Как писать и сопоставлять регулярные выражения (Regex) – YouTube