我得到以下结果:
>>> x = '-15'
>>> print x.isdigit()
False
当我期望它是True
。似乎没有返回True
负数字符串的内置函数。检测它的建议是什么?
我得到以下结果:
>>> x = '-15'
>>> print x.isdigit()
False
当我期望它是True
。似乎没有返回True
负数字符串的内置函数。检测它的建议是什么?
推荐的方法是try
:
try:
x = int(x)
except ValueError:
print "{} is not an integer".format(x)
如果您还期望十进制数字,请使用float()
而不是int()
.
可能有一种更优雅的 Python 方法,但一般方法是检查第一个字符是否为'-'
,如果是,则调用isdigit
第二个字符。
也许正则表达式在这里是一个开销,但这可以在一个数字之前捕获+
and ,也可以捕获and :-
float
int
(基于@Mark 的评论)
代码:
import re
def isdigit(string):
return bool(re.match(r'[-+]?(?:\d+(?:\.\d*)?|\.\d+)', string))
演示:
print isdigit('12') # True
print isdigit('-12') # True
print isdigit('aa') # False
print isdigit('1a2a') # False
print isdigit('-12-12') # False
print isdigit('-12.001') # True
print isdigit('+12.001') # True
print isdigit('.001') # True
print isdigit('+.001') # True
print isdigit('-.001') # True
print isdigit('-.') # False
Use lstrip
:
>>> negative_number = "-1"
>>> negative_number.lstrip('-').isnumeric()
True
>>> positive_number = "2"
>>> positive_number.lstrip('-').isnumeric()
True