import re
def xNumber(arg):
switcher = {
"mln": 1000000,
"million": 1000000,
"bln": 1000000000,
"billion": 1000000000,
"thousand": 1000,
"hundred": 100
}
return switcher.get(arg, 1)
rx = re.compile(r'\$(?P<number>\d+(?:,\d{3})?(?:\.\d+)?(?:-\d+(?:,\d{3})?(?:\.\d+)?)?)(?:\s*(?P<suffix>mln|million|bln|billion|thousand|hundred))?')
s = "$3 million, $910,000,$16.5-18 million"
result = ""
for match in rx.finditer(s):
if match.group("suffix") and match.group("number").find("-") == -1: # We have no range and have a suffix
result = str(float(match.group("number"))*xNumber(match.group("suffix")))
elif match.group("number").find("-") > -1: # Range
lst = [float(x) for x in match.group("number").split("-")]
result = str(float(sum(lst))/len(lst)) + (" {}".format(match.group("suffix")) if match.group("suffix") else "")
else: result = float(match.group("number").replace(",",""))
print(result)
aW1wb3J0IHJlCmRlZiB4TnVtYmVyKGFyZyk6Cglzd2l0Y2hlciA9IHsKCQkibWxuIjogMTAwMDAwMCwKCQkibWlsbGlvbiI6IDEwMDAwMDAsCgkJImJsbiI6IDEwMDAwMDAwMDAsCgkJImJpbGxpb24iOiAxMDAwMDAwMDAwLAoJCSJ0aG91c2FuZCI6IDEwMDAsCgkJImh1bmRyZWQiOiAxMDAKCX0KCXJldHVybiBzd2l0Y2hlci5nZXQoYXJnLCAxKQoKcnggPSByZS5jb21waWxlKHInXCQoP1A8bnVtYmVyPlxkKyg/OixcZHszfSk/KD86XC5cZCspPyg/Oi1cZCsoPzosXGR7M30pPyg/OlwuXGQrKT8pPykoPzpccyooP1A8c3VmZml4Pm1sbnxtaWxsaW9ufGJsbnxiaWxsaW9ufHRob3VzYW5kfGh1bmRyZWQpKT8nKQpzID0gIiQzIG1pbGxpb24sICQ5MTAsMDAwLCQxNi41LTE4IG1pbGxpb24iCnJlc3VsdCA9ICIiCmZvciBtYXRjaCBpbiByeC5maW5kaXRlcihzKToKCWlmIG1hdGNoLmdyb3VwKCJzdWZmaXgiKSBhbmQgbWF0Y2guZ3JvdXAoIm51bWJlciIpLmZpbmQoIi0iKSA9PSAtMTogICAjIFdlIGhhdmUgbm8gcmFuZ2UgYW5kIGhhdmUgYSBzdWZmaXgKCQlyZXN1bHQgPSBzdHIoZmxvYXQobWF0Y2guZ3JvdXAoIm51bWJlciIpKSp4TnVtYmVyKG1hdGNoLmdyb3VwKCJzdWZmaXgiKSkpCgllbGlmIG1hdGNoLmdyb3VwKCJudW1iZXIiKS5maW5kKCItIikgPiAtMTogICMgUmFuZ2UKCQlsc3QgPSBbZmxvYXQoeCkgZm9yIHggaW4gbWF0Y2guZ3JvdXAoIm51bWJlciIpLnNwbGl0KCItIildCgkJcmVzdWx0ID0gc3RyKGZsb2F0KHN1bShsc3QpKS9sZW4obHN0KSkgKyAoIiB7fSIuZm9ybWF0KG1hdGNoLmdyb3VwKCJzdWZmaXgiKSkgaWYgbWF0Y2guZ3JvdXAoInN1ZmZpeCIpIGVsc2UgIiIpCgllbHNlOiByZXN1bHQgPSBmbG9hdChtYXRjaC5ncm91cCgibnVtYmVyIikucmVwbGFjZSgiLCIsIiIpKQoJcHJpbnQocmVzdWx0KQ==