Squezing in replacements into strings

Peter Otten __peter__ at web.de
Mon Apr 25 08:15:33 EDT 2005


Peter Bengtsson wrote:

> I've got a regular expression that finds certain words from a longer
> string.
>>From "Peter Bengtsson PETER, or PeTeR" it finds: 'Peter','PETER','PeTeR'.

> The problem is when there are more than one matches. The match.start() and
> match.end() are for the original string but after the first iteration in
> the loop the original string changes (it gains 2 characters in length due
to the "_"'s

> How can I do this this concatenation correctly?

I think sub() is more appropriate than finditer() for your problem, e. g.:

>>> def process(match):
...     return "_%s_" % match.group(1).title()
...
>>> re.compile("(peter)", re.I).sub(process, "Peter Bengtsson PETER, or
PeTeR")
'_Peter_ Bengtsson _Peter_, or _Peter_'
>>>

Peter



More information about the Python-list mailing list