import re
integer_re       = r'-?(0([0-7]*|[Xx][0-9A-Fa-f]+)|[1-9][0-9]*)'
integer_re_eager = r'-?(0([Xx][0-9A-Fa-f]+|[0-7]*)|[1-9][0-9]*)'
integer_re_alt   = r'-?([1-9][0-9]*|0[Xx][0-9A-Fa-f]+|0[0-7]*)'
text = '0x123'
print re.match(integer_re,       text).group()
print re.match(integer_re_eager, text).group()
print re.match(integer_re_alt,   text).group()
