将测量值从字符串转换为 Int 或 Float

Convert measurement from String to Int or Float

我有字符串

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 的能力,其中只有 returns 字符串开头的数字。另一个问题是寻找字符串中的所有数字。

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

如果 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

这里已经回答了: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

如果你想避免导入正则表达式,你可以尝试使用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])

出于轻微的 memory/performance 原因,我选择跟踪第一个非数字字符的索引而不是构建字符串。这也只提取字符串中的第一个数字。

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

如果你有白色space,使用split:

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

如果你只想从字符串的开头获取数字而没有白色 space(或使用正则表达式),试试这个:

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

请注意,它的灵感来自 here 关于打破列表理解的讨论。