Python:识别数字字符串?

fsm*_*fsm 1 python regex coercion

我尝试了几种方法,我真的只关心性能,而不是正确性.我注意到基于正则表达式的实现比使用类型强制的实现慢约3-4倍.还有另一种更有效的方法吗?

def IsNumber(x):
    try:
        _ = float(x)
    except ValueError:
        return False
    return True

 def IsNumber2(x):
     import re
     if re.match("^\d*.?\d*$", x) == None:
         return False
     return True
Run Code Online (Sandbox Code Playgroud)

谢谢!

小智 6

首先,他们没有做同样的事情.例如,浮点数可以指定为"1e3",而float()将接受它.它也不是强制,而是转换.

其次,不要在IsNumber2中导入re,特别是如果你试图将它与timeit一起使用.在函数外部进行导入.

最后,float()更快,我并不感到惊讶.它是一个用C编写的专用例程,用于非常特定的目的,而正则表达式必须转换为一个被解释的形式.

你的第一个版本,使用float(),足够快吗?应该是,而且我不知道在Python中做同样事情的更好方法.