import re
from collections import defaultdict
string = '-12.5e-1 x^3 + -5 x^2 --0.5x +-0.75x^3 +6'
pattern = re.compile(r'\s*([+-])\s*([-+]?(?:(?:\d*\.\d+)|(?:\d+\.?))(?:[Ee][+-]?\d+)?)\s*(x(\^\d+)?)?')
coefficients = defaultdict(int)
string = '+' + string.rstrip()
while string:
match = pattern.match(string)
if not match:
raise ValueError('Invalid input starting with {}'.format(string))
sign = 1 if match.group(1) == '+' else -1
coefficient = sign * float(match.group(2))
if match.group(3):
exp = match.group(4)
exp = 1 if exp is None else int(exp[1:])
else:
exp = 0
coefficients[exp] += coefficient
string = string[match.end():]
print (coefficients)
aW1wb3J0IHJlCmZyb20gY29sbGVjdGlvbnMgaW1wb3J0IGRlZmF1bHRkaWN0CgpzdHJpbmcgPSAnLTEyLjVlLTEgeF4zICsgLTUgeF4yIC0tMC41eCArLTAuNzV4XjMgKzYnCgpwYXR0ZXJuID0gcmUuY29tcGlsZShyJ1xzKihbKy1dKVxzKihbLStdPyg/Oig/OlxkKlwuXGQrKXwoPzpcZCtcLj8pKSg/OltFZV1bKy1dP1xkKyk/KVxzKih4KFxeXGQrKT8pPycpCgpjb2VmZmljaWVudHMgPSBkZWZhdWx0ZGljdChpbnQpCnN0cmluZyA9ICcrJyArIHN0cmluZy5yc3RyaXAoKQp3aGlsZSBzdHJpbmc6CiAgICBtYXRjaCA9IHBhdHRlcm4ubWF0Y2goc3RyaW5nKQogICAgaWYgbm90IG1hdGNoOgogICAgICAgIHJhaXNlIFZhbHVlRXJyb3IoJ0ludmFsaWQgaW5wdXQgc3RhcnRpbmcgd2l0aCB7fScuZm9ybWF0KHN0cmluZykpCiAgICBzaWduID0gMSBpZiBtYXRjaC5ncm91cCgxKSA9PSAnKycgZWxzZSAtMQogICAgY29lZmZpY2llbnQgPSBzaWduICogZmxvYXQobWF0Y2guZ3JvdXAoMikpCiAgICBpZiBtYXRjaC5ncm91cCgzKToKICAgICAgICBleHAgPSBtYXRjaC5ncm91cCg0KQogICAgICAgIGV4cCA9IDEgaWYgZXhwIGlzIE5vbmUgZWxzZSBpbnQoZXhwWzE6XSkKICAgIGVsc2U6CiAgICAgICAgZXhwID0gMAogICAgY29lZmZpY2llbnRzW2V4cF0gKz0gY29lZmZpY2llbnQKICAgIHN0cmluZyA9IHN0cmluZ1ttYXRjaC5lbmQoKTpdCgpwcmludCAoY29lZmZpY2llbnRzKQ==