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..."
This is a variant of the class I've used in the past for stateful
replacements:
import re
class Counter(object):
def __init__(self, prefix="REPL", start=1):
self.prefix = prefix
self.counter = start - 1
def __call__(self, matchobj):
self.counter += 1
return "%s%02i" % (self.prefix, self.counter)
r = re.compile("TAG") # the regexp to find what we want
s = "some TAG stuff with TAG whatever more TAG stuff"
print s
# just use the counter
print r.sub(Counter(), s)
# demo a different starting number
print r.sub(Counter(start=42), s)
# maintain a single counter across calls
c = Counter(prefix="Hello", start=42)
print r.sub(c, s)
print r.sub(c, s)
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.
This also has problems if your search-string is a substring of
your replacement string:
search = "foo"
replacement = "foobar#"
You'll get
s = "foo_foo"
s = "foobar01_foo"
s = "foobar02bar01_foo"
...
which isn't quite what it looks like you want.
-tkc
--
http://mail.python.org/mailman/listinfo/python-list