是否有快速查找字符串是否为实数的方法,一次只读取一个字符并对每个字符执行isdigit()
?我希望能够测试浮点数,例如0.03001
。
答案 0 :(得分:12)
如果你的浮点数是实数,那么这应该有效:
def isfloat(str):
try:
float(str)
except ValueError:
return False
return True
请注意,这将在内部仍然循环你的字符串,但这是不可避免的。
答案 1 :(得分:7)
>>> a = "12345" # good number
>>> int(a)
12345
>>> b = "12345G" # bad number
>>> int(b)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '12345G'
你可以这样做:
def isNumber(s):
try:
int(s)
except ValueError:
return False
return True
如果您想要一个浮点数,请将int
替换为float
(感谢@cobbal)。
答案 2 :(得分:1)
使用正则表达式还有另一种方法:
import re
def is_float(str):
if re.match(r"\d+\.*\d*", str):
return True
else:
return False
答案 3 :(得分:1)
实数有更精确的正则表达式:
"^[-+]?[0-9]*\.?[0-9]+(e[-+]?[0-9]+)?$"
检查一下这个正则表达式:
realnum=re.compile("^[-+]?[0-9]*\.?[0-9]+(e[-+]?[0-9]+)?$")
["yes" if realnum.match(test) else "no" for test in ["12", "+12", "-12", "-3.14", ".314e1", "+.01e-12", "+22.134e+2"]]
['yes', 'yes', 'yes', 'yes', 'yes', 'yes', 'yes']
["yes" if realnum.match(test) else "no" for test in ["..12", "+-12", "-12.", "-3.14p", ".314e1.9", "+. 01e-12", "+22.134e"]]
['no', 'no', 'no', 'no', 'no', 'no', 'no']
答案 4 :(得分:0)
验证实数的方法:
def verify_real_number(item):
""" Method to find if an 'item'is real number"""
item = str(item).strip()
if not(item):
return False
elif(item.isdigit()):
return True
elif re.match(r"\d+\.*\d*", item) or re.match(r"-\d+\.*\d*", item):
return True
else:
return False