I get the following result:
>>> x = '-15'
>>> print x.isdigit()
False
When I expect it to be True. There seems to be no built in function that returns True for a string of negative number. What is the recommend to detect it?
I get the following result:
>>> x = '-15'
>>> print x.isdigit()
False
When I expect it to be True. There seems to be no built in function that returns True for a string of negative number. What is the recommend to detect it?
 
    
    The recommended way would be to try it:
try:
    x = int(x)
except ValueError:
    print "{} is not an integer".format(x)
If you also expect decimal numbers, use float() instead of int().
 
    
    There might be a more elegant Python way, but a general method is to check if the first character is '-', and if so, call isdigit on the 2nd character onward.
 
    
    Maybe regex is an overhead here, but this could catch + and - before a number, and also could catch float and int as well:
(based on @Mark's comment)
CODE:
import re
def isdigit(string):
    return bool(re.match(r'[-+]?(?:\d+(?:\.\d*)?|\.\d+)', string))
DEMO:
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
