Python: Replace with regex

Question:

I need to replace part of a string. I was looking through the Python documentation and found re.sub.

import re
s = '<textarea id="Foo"></textarea>'
output = re.sub(r'<textarea.*>(.*)</textarea>', 'Bar', s)
print output

>>>'Bar'

I was expecting this to print '<textarea id="Foo">Bar</textarea>' and not ‘bar’.

Could anybody tell me what I did wrong?

Asked By: Pickels

||

Answers:

Instead of capturing the part you want to replace you can capture the parts you want to keep and then refer to them using a reference 1 to include them in the substituted string.

Try this instead:

output = re.sub(r'(<textarea.*>).*(</textarea>)', r'1Bar2', s)

Also, assuming this is HTML you should consider using an HTML parser for this task, for example Beautiful Soup.

Answered By: Mark Byers

Or you could just use the search function instead:

match=re.search(r'(<textarea.*>).*(</textarea>)', s)
output = match.group(1)+'bar'+match.group(2)
print output
>>>'<textarea id="Foo">bar</textarea>'
Answered By: Rahul Agarwal
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.