将测量值从字符串转换为 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 关于打破列表理解的讨论。
我有字符串
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 关于打破列表理解的讨论。