"Increment numbers in a string"

20 October 2005   2 comments   Python

http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/442460

Mind That Age!

This blog post is 13 years old! Most likely, its content is outdated. Especially if it's technical.

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

Comments

oneliner
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
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


Related posts

Previous:
Playing with Reverend Bayesian 19 October 2005
Next:
Pandora - a great Internet radio 21 October 2005
Related by Keyword:
Python Cookbook arrived 05 April 2005
Indent text like email clients do 11 November 2004
PLEAC 31 October 2003
Related by Text:
jQuery and Highslide JS 08 January 2008
I'm back! Peterbe.com has been renewed 05 June 2005
Anti-McCain propaganda videos 12 August 2008
Ever wondered how much $87 Billion is? 04 November 2003
Guake, not Yakuake or Yeahconsole 23 January 2010