superpollo wrote: > superpollo ha scritto: >> hi. >> >> what is the most pythonic way to substitute substrings? >> >> eg: i want to apply: >> >> foo --> bar >> baz --> quux >> quuux --> foo >> >> so that: >> >> fooxxxbazyyyquuux --> barxxxquuxyyyfoo >> >> bye > > i explain better: > > 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...
If you want to avoid regular expressions: def replace_many(s, pairs): if len(pairs): a, b = pairs[0] rest = pairs[1:] return b.join(replace_many(t, rest) for t in s.split(a)) else: return s assert replace_many("abc", ["ab", "bc", "ca"]) == "bca" assert (replace_many("fooxxxbazyyyquuux", [("quuux", "foo"), ("foo", "bar"), ("baz", "quux")]) == "barxxxquuxyyyfoo") Not tested. Peter -- http://mail.python.org/mailman/listinfo/python-list