检查字符串是否为实数

时间:2011-05-10 20:44:10

标签: python validation numbers

是否有快速查找字符串是否为实数的方法,一次只读取一个字符并对每个字符执行isdigit()?我希望能够测试浮点数,例如0.03001

5 个答案:

答案 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