In article <0scs26-7a5....@rama.fbx.proxad.net>, TP <tribulati...@paralleles.invalid> wrote:
> Hi everybody, > > I would like to change only the nth occurence of a pattern in a string. It's a little ugly, but the following looks like it works. The gist is to split the string on your pattern, then re-join the pieces using the original delimiter everywhere except for the n'th splice. Split() is a wonderful tool. I'm a hard-core regex geek, but I find that most things I might have written a big hairy regex for are easier solved by doing split() and then attacking the pieces. There may be some fencepost errors here. I got the basics working, and left the details as an exercise for the reader :-) This version assumes the pattern is a literal string. If it's really a regex, you'll need to put the pattern in parens when you call split(); this will return the exact text matched each time as elements of the list. And then your post-processing gets a little more complicated, but nothing that's too bad. This does a couple of passes over the data, but at least all the operations are O(n), so the whole thing is O(n). #!/usr/bin/python import re v = "coucoucoucou" pattern = "o" n = 2 parts = re.split(pattern, v) print parts first = parts[:n] last = parts[n:] print first print last j1 = pattern.join(first) j2 = pattern.join(last) print j1 print j2 print "i".join([j1, j2]) print v -- http://mail.python.org/mailman/listinfo/python-list