Подтвердить что ты не робот

Извлекать цифры простым способом из строки python

У меня есть строка, которая хранит число и единицу, например

x= '$120'
y = ' 90 Degrees F'
banana = '200 kgm'
orange = '300 gm'
total_weight = banana + orange/1000 

и, например, я хочу добавить весы

total_weight  = 200 + 300/1000

Спасибо!

Я пытаюсь извлечь числа только для выполнения некоторых операций с ними... любая идея о том, что это самый простой способ сделать это? Я имею дело только с этими двумя форматами, то есть цифры находятся в начале или в конце строки...

4b9b3361

Ответ 1

Самый простой способ извлечь число из строки - использовать регулярные выражения и findall.

>>> import re
>>> s = '300 gm'
>>> re.findall('\d+', s)
['300']
>>> s = '300 gm 200 kgm some more stuff a number: 439843'
>>> re.findall('\d+', s)
['300', '200', '439843']

Возможно, вам нужно что-то более сложное, но это хороший первый шаг.

Обратите внимание, что вам все равно придется вызывать int в результате, чтобы получить правильный числовой тип (а не другую строку):

>>> map(int, re.findall('\d+', s))
[300, 200, 439843]

Ответ 2

Без использования regex вы можете просто сделать:

def get_num(x):
    return int(''.join(ele for ele in x if ele.isdigit()))

Результат:

>>> get_num(x)
120
>>> get_num(y)
90
>>> get_num(banana)
200
>>> get_num(orange)
300

EDIT:

Отвечая на следующий вопрос.

Если мы знаем, что единственным периодом в данной строке является десятичная точка, извлечение поплавка довольно просто:

def get_num(x):
    return float(''.join(ele for ele in x if ele.isdigit() or ele == '.'))

Результат:

>>> get_num('dfgd 45.678fjfjf')
45.678

Ответ 3

Это регулярное выражение также обрабатывает поплавки

import re
re_float = re.compile(r'\d*\.?\d+')

Вы также можете добавить группу к выражению, которое ловит ваши единицы веса.

re_banana = re.compile(r'(?P<number>\d*\.?\d+)\s?(?P<uni>[a-zA-Z]+)')

Вы можете получить доступ к названным группам следующим образом: re_banana.match("200 kgm").group('number').

Я думаю, что это должно помочь вам начать работу.

Ответ 4

>>> x='$120'
>>> import string
>>> a=string.maketrans('','')
>>> ch=a.translate(a, string.digits)
>>> int(x.translate(a, ch))
120

Ответ 5

Если вы делаете какую-то математику с цифрами, вы также можете узнать единицы. Учитывая ваши ограничения ввода (что входная строка содержит только единицу и значение), это должно правильно возвратить оба (вам просто нужно выяснить, как конвертировать единицы в общие единицы для вашей математики).

def unit_value(str):
    m = re.match(r'([^\d]*)(\d*\.?\d+)([^\d]*)', str)
    if m:
        g = m.groups()
        return ' '.join((g[0], g[2])).strip(), float(g[1])
    else:
        return int(str)