#!/usr/bin/env python """Format Number separating groups of 3 digits This implements a simple state machine that implements the following regular expression (which achieve the same goal): (\d)(?=(\d{3})+$) """ def get_groups(s): test = lambda x: len(x) == 3 and "".join(x).isdigit() groups = [s[i:][:3] for i in range(0, len(s), 3)] if all(map(test, groups)): return groups def generate_format(s): i = 0 N = len(s) while i < N: if s[i].isdigit(): groups = get_groups(s[(i + 1):]) if groups: yield s[i] for group in groups: yield "," yield group break else: yield s[i] i += 1 def format(x): s = str(x) if "." in s: i, f = s.split(".", 1) if i.isdigit() and f.isdigit(): return "%s.%s" % ("".join(generate_format(i)), f) elif s.isdigit(): return "".join(generate_format(s)) print(format(1)) print(format(12)) print(format(123)) print(format(1234)) print(format(12345)) print(format(123456)) print(format(12345678)) print(format(123456789)) print(format(123456789.1234))