我有字符串
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
答案 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])
我选择跟踪第一个非数字字符的索引,而不是出于内存/性能上的原因而构建字符串。这也只提取字符串中的第一个数字。
这当然只适用于整数。对于浮点数,您还必须接受.
字符(并且可能跟踪您是否已经确定它是否是有效的浮点字符串)。