#!/usr/bin/python2.4 import sys import re RE_COMMA = re.compile(r'^([-+]?\d+)(\d{3})') def comma(n): while True: m = RE_COMMA.match(n) if not m: break n = '%s,%s' % (m.group(1), m.group(2)) return n for n in sys.argv[1:]: if n.isdigit(): print n, "->", comma(n) else: print "%s is not num\n" % n
結果
> ./num_comma_exp.py 1234567 1234567 -> 1,234 > ./num_comma_exp.py 12345678 12345678 -> 12,345 > ./num_comma_exp.py 123456789 123456789 -> 123,456
"+" が greedy にマッチさせてくるんだったらこの結果はおかしくないか?
> "12345678".sub(/^([-+]?\d+)(\d{3})/, '\1,\2') => "12345,678
しかたないので "RE_COMMA = re.compile(r'^([-+]?\d+)(\d{3})(.*?)$')" などとしてみたらうまく動いた。