def extract(s):
res = decoder.match(s)<EOL>if res is None: raise NotANumber(s)<EOL>sign, intpart, fraction, exppart = res.group(<NUM_LIT:1>,<NUM_LIT:2>,<NUM_LIT:3>,<NUM_LIT:4>)<EOL>if sign == '<STR_LIT:+>': sign = '<STR_LIT>'<EOL>if fraction: fraction = fraction[<NUM_LIT:1>:]<EOL>if exppart: expo = int(exppart[<NUM_LIT:1>:])<EOL>else: expo = <NUM_LIT:0><EOL>return sign, intpart, fraction, expo<EOL>
Return (sign, intpart, fraction, expo) or raise an exception:
    sign is '+' or '-'
    intpart is 0 or more digits beginning with a nonzero
    fraction is 0 or more digits
    expo is an integer