ПРИХОДИТЕ УЧИТЬСЯ НОВОЙ ПРОФЕССИИ ЛЕТОМ СО СКИДКОЙ ДО 70%Забронировать скидку

Удаление нецифровых символов из строки в Python: решение

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

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

Python
Скопировать код
import re
result = re.sub('\D', '', 'input123text')  # '123'

При помощи модуля re в Python мы можем удалить все символы, не являющиеся цифрами. Чтобы достичь этой цели, используется функция re.sub() в сочетании с регулярным выражением '\D'.

Пройдите тест и узнайте подходит ли вам сфера IT
Пройти тест

Анализ регулярного рецепта

Регулярные выражения в Python можно назвать швейцарским ножом при работе со строками. Они эффективно фильтруют текст в соответствии с нашими требованиями. Для удаления всего кроме цифр достаточно воспользоваться выражением '\D' в функции re.sub():

Python
Скопировать код
import re
digit_string = re.sub('\D', '', '123abc456')  # Возвращает: '123456'

Работает как шарм, независимо от вводных.

Особенности:

  • Пустая строка: re.sub('\D', '', '') вернёт ''. Из пустой строки мы не можем извлечь что-либо.
  • Отсутствие цифр: re.sub('\D', '', 'abc') также вернёт ''. Если в исходной строке нет цифр, результатом будет пустая строка.

У нас есть альтернативы!

Динамичный дуэт: filter() и join

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

Python
Скопировать код
res = ''.join(filter(str.isdigit, 'input123text'))  # '123'

Мощный спутник: str.translate()

В Python 3 метод str.maketrans() позволяет создать таблицу перевода (трансляций), которая поможет удалить все лишние символы:

Python
Скопировать код
trans_table = str.maketrans('', '', '0123456789'.translate(str.maketrans('', '', '\D')))
masked_string = 'input123text'.translate(trans_table)  # '123'

Пользуемся силой генераторных выражений

Генераторные выражения также могут пригодиться для эффективной работы со строками:

Python
Скопировать код
res = ''.join(c for c in 'input123text' if c.isdigit())  # '123'

Экзотика: обработка особых форматов чисел

Требуются специальные действия при работе с числами с плавающей точкой. Для этого также можно использовать регулярные выражения:

Python
Скопировать код
float_str = '-123.45abc'
result = ''.join(re.findall(r'[\d\.-]', float_str))  # '-123.45'

Таким образом мы сохраним цифры после точки и минус, если он есть.

А как насчет строк Unicode (Python 3)...

Unicode строки можно обработать следующим образом:

Python
Скопировать код
remove_dict = dict.fromkeys(map(ord, '0123456789'.translate(str.maketrans('', '', '\D'))))
res = 'input123text'.translate(remove_dict)  # '123'

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

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

Трансформация:

Markdown
Скопировать код
До: ["A1", "B2", "C", "9XY"]
После:  [ "1",   "2",  "",    "9"  ]

Отсев:

  • Символы, не являющиеся цифрами (A, B, C, X, Y) — "сорняки".
  • Цифры (1, 2, 9) — "ценные элементы", которые мы хотим сохранить.
  • re.sub('\D', '', ...) — наш инструмент для избавления от "сорняков".

Лучшие практики сохранения значимости

Для сохранения значимости числовых данных важно учитывать все особенности числового формата: десятичные точки, отрицательные числа или ведущие нули. Так мы получим максимально полезные данные из входной строки. Отличная работа!

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

  1. Официальная документация Python — Регулярные выражения.
  2. Регулярные выражения в Python – PythonForBeginners.com.
  3. Извлечение чисел из строки в Python — Stack Overflow.
  4. Обучающее видео о регулярных выражениях в Python (YouTube).
  5. Метод строки translate() в Python — programiz.com.
  6. Методы строк Python — W3schools.com.
  7. Проверьте свои регулярные выражения в Python — pythex.org.