F commatize(s, period = 3, sep = ‘,’) V m = re:‘(\.[0-9]+|[1-9]([0-9]+)?(\.[0-9]+)?)’.search(s) I !m R s V match = m.group() V splits = match.split(‘.’) V ip = splits[0] I ip.len > period V inserted = 0 L(i) ((ip.len - 1) % period + 1 .< ip.len).step(period) ip = ip[0 .< i + inserted]‘’sep‘’ip[i + inserted ..] inserted += sep.len I splits.len > 1 V dp = splits[1] I dp.len > period L(i) ((dp.len - 1) I/ period * period .< period - 1).step(-period) dp = dp[0 .< i]‘’sep‘’dp[i..] ip ‘’= ‘.’dp R s[0 .< m.start()]‘’ip‘’s[m.end()..] V tests = [‘123456789.123456789’, ‘.123456789’, ‘57256.1D-4’, ‘pi=3.14159265358979323846264338327950288419716939937510582097494459231’, ‘The author has two Z$100000000000000 Zimbabwe notes (100 trillion).’, ‘-in Aus$+1411.8millions’, ‘===US$0017440 millions=== (in 2000 dollars)’, ‘123.e8000 is pretty big.’, ‘The land area of the earth is 57268900(29% of the surface) square miles.’, ‘Ain't no numbers in this here words, nohow, no way, Jose.’, ‘James was never known as 0000000007’, ‘Arthur Eddington wrote: I believe there are ’"" ‘15747724136275002577605653961181555468044717914527116709366231425076185631031296’"" ‘ protons in the universe.’, ‘ $-140000±100 millions.’, ‘6/9/1946 was a good year for some.’] print(commatize(tests[0], period' 2, sep' ‘*’)) print(commatize(tests[1], period' 3, sep' ‘-’)) print(commatize(tests[2], period' 4, sep' ‘__’)) print(commatize(tests[3], period' 5, sep' ‘ ’)) print(commatize(tests[4], sep' ‘.’)) L(test) tests[5..] print(commatize(test))