I've just uploaded my second Python Cookbook recipe. It's unfortunately not rocket science but it's application is potentially very useful. With this little function you can generate the next number in a string that contains at least one number.

The mini unittest is quite interesting perhaps:

$ python increment_strings.py
from 10dsc_0010.jpg to 10dsc_0011.jpg
from dsc_9.jpg to dsc_10.jpg
from 0000001.exe to 0000002.exe
from ref-04851 to ref-04852
oneliner - 20 October 2005 [«« Reply to this]
Looks to big for me... this will also work

import re
def increment(s):
....re.sub(r'\d+(?=[^\d]*$)', lambda m: str(int(m.group())+1).zfill(len(m.group())), s)

It's also faster. If you think it's too complex you can break it up.
oneliner - 20 October 2005 [«« Reply to this]
slightly more readable version:

last_number = re.compile(r'\d+(?=[^\d]*$)')

def increment(string):
....def increment_number(match):
........num_str = match.group(1)
........str( int(num_str) + 1).zfill( len(num_str) )

....return last_number.sub(increment_number, string)


Your email will never ever be published