我需要将一些字符串转换为float。他们中的大多数只是数字,但其中一些也有字母。常规的float()函数会抛出错误。
a='56.78'
b='56.78 ab'
float(a) >> 56.78
float(b) >> ValueError: invalid literal for float()
一种解决方案是检查是否存在除数字之外的其他字符,但我想知道是否有一些内置函数或其他短函数给出:
magicfloat(a) >> 56.78
magicfloat(b) >> 56.78
答案 0 :(得分:3)
您可以尝试从输入中删除字母:
from string import ascii_lowercase
b='56.78 ab'
float(b.strip(ascii_lowercase))
答案 1 :(得分:1)
使用regex
import re
def magicfloat(input):
numbers = re.findall(r"[-+]?[0-9]*\.?[0-9]+", input)
# TODO: Decide what to do if you got more then one number in your string
if numbers:
return float(numbers[0])
return None
a=magicfloat('56.78')
b=magicfloat('56.78 ab')
print a
print b
输出:
56.78
56.78
答案 2 :(得分:0)
简短回答:否。
没有可以实现此功能的内置功能。</ p>
长 ish 回答:是:
您可以做的一件事是检查字符串中的每个字符,以检查它是数字还是句点,然后从那里开始使用它:
def magicfloat(var):
temp = list(var)
temp = [char for char in temp if char.isdigit() or char == '.']
var = "".join(temp)
return var
因此:
>>> magicfloat('56.78 ab')
'56.78'
>>> magicfloat('56.78')
'56.78'
>>> magicfloat('56.78ashdusaid')
'56.78'
>>>