先上代码:
import re
n = input('判断是否为数字:') # 这里的 n 为字符串
if re.match(r'(^[-+]?([1-9][0-9]*|0)(\.[0-9]+)?$)', n):
print('是数字')
else:
print('不是数字')
分析:
先来看看一些数字:
3, 3.4, 0, 0.5, 1.5,-34, +0.5
要考虑的因素大概有(0,小数点,正负号)
式子以 ^[-+]?
开头,这个毫无疑问,正负数开头,可有一个或无;
接着是 ([1-9][0-9]*|0)
这里使用了 ' | '
符号连接,这样如3,30,330,0开头的也能匹配到,不会有010零开头这样子的情况;
再接着以 (\.[0-9]+)?$
结尾。这里用括号把 \.[0-9]+
给括起来让' ? '
作用于它,这样就保证了既 可以有小数点(1个)也可以 没有小数点。最后还要加个 $
符号保证完美性,不会有在最后还有其他字符的情况。