Удаление нецифровых символов из строки в Python: решение
Быстрый ответ
import re
result = re.sub('\D', '', 'input123text') # '123'
При помощи модуля re
в Python мы можем удалить все символы, не являющиеся цифрами. Чтобы достичь этой цели, используется функция re.sub()
в сочетании с регулярным выражением '\D'
.
Анализ регулярного рецепта
Регулярные выражения в Python можно назвать швейцарским ножом при работе со строками. Они эффективно фильтруют текст в соответствии с нашими требованиями. Для удаления всего кроме цифр достаточно воспользоваться выражением '\D'
в функции re.sub()
:
import re
digit_string = re.sub('\D', '', '123abc456') # Возвращает: '123456'
Работает как шарм, независимо от вводных.
Особенности:
- Пустая строка:
re.sub('\D', '', '')
вернёт''
. Из пустой строки мы не можем извлечь что-либо. - Отсутствие цифр:
re.sub('\D', '', 'abc')
также вернёт''
. Если в исходной строке нет цифр, результатом будет пустая строка.
У нас есть альтернативы!
Динамичный дуэт: filter()
и join
Также можно применить в Python 3 комбинацию функций filter()
и str.isdigit
для извлечения цифр из строки. Чтобы соединить полученные символы, на помощь приходит join()
:
res = ''.join(filter(str.isdigit, 'input123text')) # '123'
Мощный спутник: str.translate()
В Python 3 метод str.maketrans()
позволяет создать таблицу перевода (трансляций), которая поможет удалить все лишние символы:
trans_table = str.maketrans('', '', '0123456789'.translate(str.maketrans('', '', '\D')))
masked_string = 'input123text'.translate(trans_table) # '123'
Пользуемся силой генераторных выражений
Генераторные выражения также могут пригодиться для эффективной работы со строками:
res = ''.join(c for c in 'input123text' if c.isdigit()) # '123'
Экзотика: обработка особых форматов чисел
Требуются специальные действия при работе с числами с плавающей точкой. Для этого также можно использовать регулярные выражения:
float_str = '-123.45abc'
result = ''.join(re.findall(r'[\d\.-]', float_str)) # '-123.45'
Таким образом мы сохраним цифры после точки и минус, если он есть.
А как насчет строк Unicode (Python 3)...
Unicode строки можно обработать следующим образом:
remove_dict = dict.fromkeys(map(ord, '0123456789'.translate(str.maketrans('', '', '\D'))))
res = 'input123text'.translate(remove_dict) # '123'
Визуализация
import re
cleansed_string = re.sub('\D', '', 'original_string')
Трансформация:
До: ["A1", "B2", "C", "9XY"]
После: [ "1", "2", "", "9" ]
Отсев:
- Символы, не являющиеся цифрами (A, B, C, X, Y) — "сорняки".
- Цифры (1, 2, 9) — "ценные элементы", которые мы хотим сохранить.
re.sub('\D', '', ...)
— наш инструмент для избавления от "сорняков".
Лучшие практики сохранения значимости
Для сохранения значимости числовых данных важно учитывать все особенности числового формата: десятичные точки, отрицательные числа или ведущие нули. Так мы получим максимально полезные данные из входной строки. Отличная работа!
Полезные материалы
- Официальная документация Python — Регулярные выражения.
- Регулярные выражения в Python – PythonForBeginners.com.
- Извлечение чисел из строки в Python — Stack Overflow.
- Обучающее видео о регулярных выражениях в Python (YouTube).
- Метод строки translate() в Python — programiz.com.
- Методы строк Python — W3schools.com.
- Проверьте свои регулярные выражения в Python — pythex.org.