将测量值从String转换为Int或Float

时间:2016-08-08 09:32:15

标签: python string int measurement

我有字符串

var = '7 msecs'
#var = int(var)
#var = float(var)

我想将其转换为整数(7)或浮点数(7.0)。 此转换适用于javascript,因为它似乎采用了以下非数值之前的第一个值。

我怎样才能在Python中执行此操作?

我想要一个很好的方法来做到这一点,而不必做

var = int(var.split(' ')[0])

它也适用于:

'10mm' or '10.55€' 

考虑重复(Python: Extract numbers from a string

这个问题不同,因为我试图在javascript中复制parseInt / parseFloat的能力,它只返回字符串开头的数字。另一个问题是查找字符串中的所有数字。

#What I want:
'123mm' -> 123
'123mm1' -> 123

4 个答案:

答案 0 :(得分:1)

如果您有空格,请使用split

>>> s = "123 msecs2"
>>> int(s.split()[0])
123

如果你想从字符串的开头只取一个没有空格(或使用正则表达式)的数字,试试这个:

>>> s = "123msecs2"
>>> int("".join(list(next(iter(())) if not x.isdigit() else x for x in s)))
123

请注意,它从讨论here中获得了关于打破列表推导的灵感。

答案 1 :(得分:-1)

如果var = '7 msecs'

通过过滤器

int(filter(str.isdigit, var))

正则表达式

import re
p = re.compile(ur'\d')
re.search(p, var)

或通过加入

s = ''.join(x for x in var if x.isdigit())
print int(s)
7

答案 2 :(得分:-1)

这已经在这里得到解答:Python: Extract numbers from a string

您可以使用正则表达式从字符串中提取所有数字:

>>> import re
>>> s = "7 msecs"
>>> re.findall(r"\d+", s)
["7"]

如果您只希望字符串中的第一个数字为int,则可以使用:

>>> import re
>>> s = "7 msecs"
>>> int(re.findall(r"\d+", s)[0])
7

答案 3 :(得分:-1)

如果您想避免导入正则表达式,可以尝试使用isdigit()。但是对于它的价值,我更喜欢int(var.split()[0])

var = '7 msecs'
numeric_end = 0
for i in xrange(len(var)):
    if not var[i].isdigit():
        numeric_end = i
        break

print int(var[:numeric_end])

我选择跟踪第一个非数字字符的索引,而不是出于内存/性能上的原因而构建字符串。这也只提取字符串中的第一个数字。

这当然只适用于整数。对于浮点数,您还必须接受.字符(并且可能跟踪您是否已经确定它是否是有效的浮点字符串)。