On Feb 17, 7:10 am, OdarR <olivier.da...@gmail.com> wrote: > Hi guys, > > how would you do a clever find and replace, where the value replacing > the tag > is changing on each occurence ? > > ".......TAG............TAG................TAG..........TAG....." > > is replaced by this : > > ".......REPL01............REPL02................REPL03..........REPL04..." > > A better and clever method than this snippet should exist I hope : > > counter = 1 > while 'TAG' in mystring: > mystring=mystring.replace('TAG', 'REPL'+str(counter), 1) > counter+=1 > ... > > (the find is always re-starting at the string beginning, this is not > efficient. > > any ideas ? thanks,
C:\junk>type fancyrepl.py def fancyrepl(tag, replfunc, input_string): count = 0 pieces = [] pos = 0 taglen = len(tag) while 1: try: newpos = input_string.index(tag, pos) except ValueError: pieces.append(input_string[pos:]) return ''.join(pieces) pieces.append(input_string[pos:newpos]) count += 1 pieces.append(replfunc(count)) pos = newpos + taglen tests = [ '', 'XXX', 'XXXXXX', 'abcdeXXX', 'XXXfghij', 'abcdeXXXfghij', 'abcdeXXXfghijXXXpqrst', ] for test in tests: print ' <', repr(test) result = fancyrepl('XXX', lambda n: 'SUB%d' % n, test) print ' >', repr(result) C:\junk>fancyrepl.py < '' > '' < 'XXX' > 'SUB1' < 'XXXXXX' > 'SUB1SUB2' < 'abcdeXXX' > 'abcdeSUB1' < 'XXXfghij' > 'SUB1fghij' < 'abcdeXXXfghij' > 'abcdeSUB1fghij' < 'abcdeXXXfghijXXXpqrst' > 'abcdeSUB1fghijSUB2pqrst' HTH, John -- http://mail.python.org/mailman/listinfo/python-list