On Mon, 18 Jan 2010 11:21:54 +0100, superpollo wrote: >> what is the most pythonic way to substitute substrings?
> say the subs are: > > quuux --> foo > foo --> bar > baz --> quux > > then i cannot apply the subs in sequence (say, .replace() in a loop), > otherwise: > > fooxxxbazyyyquuux --> fooxxxbazyyyfoo --> barxxxbazyyybar --> > barxxxquuxyyybar > > not as intended... Are there any characters which are guaranteed never to occur in the string? If so: s = s.replace('quuux', '@1').replace('foo', '@2').replace('baz', '@3') s = s.replace('@1', 'foo').replace('@2', 'bar').replace('@3', 'quux') E.g.: def replace(subs, s): for i, (src, dst) in enumerate(subs): s = s.replace(src, '@%06d' % i) for i, (src, dst) in enumerate(subs): s = s.replace('@%06d' % i, dst) return s Not the most efficient solution (and problematic if there aren't any "unused" characters), but somewhat shorter than the other solutions. -- http://mail.python.org/mailman/listinfo/python-list