A useful, but painful, one-liner to edit money amounts

MRAB python at mrabarnett.plus.com
Thu Aug 5 12:36:50 EDT 2010


John Posner wrote:
> On 8/5/2010 12:33 AM, John Nagle wrote:
>> There's got to be a better way to do this:
>>
>>
>> def editmoney(n) :
>> return((",".join(reduce(lambda lst, item : (lst + [item]) if
>> item else lst,
>> re.split(r'(\d\d\d)',str(n)[::-1]),[])))[::-1])
>>
> 
> Here's a more elegant variant, using regexp lookahead:
> 
> def thous_format(integer_string):
>     """
>     add comma thousands separator(s) to an integer-valued string
>     """
>     return re.sub(r'(\d{3})(?=\d)', r'\1,', integer_string[::-1])[::-1]
> 
> I *thought* that I had found this on python-list on or about July 5, but 
> I didn't find the thread after a search through the archives.
> 
You don't need to reverse the string:

def thous_format(integer_string):
     """
     add comma thousands separator(s) to an integer-valued string
     """
     return re.sub(r"(?<=\d)(?=(?:\d\d\d)+$)", ",", integer_string)



More information about the Python-list mailing list