从python字符串以简单的方式提取数字

Ka *_* Ra 26 python

我有一个字符串,例如存储一个数字和一个单位

x= '$120'
y = ' 90 Degrees F'
banana = '200 kgm'
orange = '300 gm'
total_weight = banana + orange/1000 
Run Code Online (Sandbox Code Playgroud)

例如,我想添加权重

total_weight  = 200 + 300/1000
Run Code Online (Sandbox Code Playgroud)

谢谢!

我试图提取数字只是为了用这些来做一些操作......知道最简单的方法是什么?我只处理这两种格式,即数字位于字符串的开头或结尾...

sen*_*rle 64

从字符串中提取数字的最简单方法是使用正则表达式和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']
Run Code Online (Sandbox Code Playgroud)

可能你需要更复杂的东西,但这是一个很好的第一步.

请注意,您仍然必须调用int结果以获取正确的数字类型(而不是另一个字符串):

>>> map(int, re.findall('\d+', s))
[300, 200, 439843]
Run Code Online (Sandbox Code Playgroud)


Aka*_*all 31

没有使用regex,你可以这样做:

def get_num(x):
    return int(''.join(ele for ele in x if ele.isdigit()))
Run Code Online (Sandbox Code Playgroud)

结果:

>>> get_num(x)
120
>>> get_num(y)
90
>>> get_num(banana)
200
>>> get_num(orange)
300
Run Code Online (Sandbox Code Playgroud)

编辑:

回答后续问题.

如果我们知道给定字符串中唯一的句点是小数点,则提取浮点数非常简单:

def get_num(x):
    return float(''.join(ele for ele in x if ele.isdigit() or ele == '.'))
Run Code Online (Sandbox Code Playgroud)

结果:

>>> get_num('dfgd 45.678fjfjf')
45.678
Run Code Online (Sandbox Code Playgroud)