我需要替换一个字符串的一部分。我查阅了Python文档,并找到了re.sub函数。
import re
s = '<textarea id="Foo"></textarea>'
output = re.sub(r'<textarea.*>(.*)</textarea>', 'Bar', s)
print output
>>>'Bar'
我本来期望它会输出'<textarea id="Foo">Bar</textarea>'
而不是'bar'。
请问有人能告诉我我做错了什么吗?
我需要替换一个字符串的一部分。我查阅了Python文档,并找到了re.sub函数。
import re
s = '<textarea id="Foo"></textarea>'
output = re.sub(r'<textarea.*>(.*)</textarea>', 'Bar', s)
print output
>>>'Bar'
我本来期望它会输出'<textarea id="Foo">Bar</textarea>'
而不是'bar'。
请问有人能告诉我我做错了什么吗?
不要捕获你想要替换的部分,而是捕获你想要保留的部分,然后使用引用\1
来引用它们并将它们包含在替换后的字符串中。
请尝试这个方法:
output = re.sub(r'(<textarea.*>).*(</textarea>)', r'\1Bar\2', s)
此外,假设这是HTML,您应该考虑使用HTML解析器完成此任务,例如Beautiful Soup。
r'\1Bar\3'
。 - nmichaels<textarea>
标记中的标签,则它们将被包含在匹配项内。更好的做法是使用问号防止这种情况:
r'(<textarea.*?>).*(</textarea>)'
- Jonathan Cross
match=re.search(r'(<textarea.*>).*(</textarea>)', s)
output = match.group(1)+'bar'+match.group(2)
print output
>>>'<textarea id="Foo">bar</textarea>'