Python:替换为正则表达式

Pic*_*els 47 python regex

我需要替换部分字符串.我正在浏览Python文档并找到了re.sub.

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

>>>'Bar'
Run Code Online (Sandbox Code Playgroud)

我期待这打印'<textarea id="Foo">Bar</textarea>'而不是'酒吧'.

谁能告诉我我做错了什么?

Mar*_*ers 79

您可以捕获要保留的部分,然后使用引用将它们包含在替换的字符串中,而不是捕获要替换的部分.\1

试试这个:

output = re.sub(r'(<textarea.*>).*(</textarea>)', r'\1Bar\2', s)
Run Code Online (Sandbox Code Playgroud)

此外,假设这是HTML,您应该考虑使用HTML解析器来完成此任务,例如Beautiful Soup.

  • 如上所述,最好不要解析自己的HTML.但是为了完整起见,应该指出默认情况下正则表达式是贪婪的,所以在这个例子中,第一个捕获组将匹配**最后**开放角度括号.如果字符串在`<textarea>`中有标签,那么这些标签将包含在匹配内.最好使用问号来防止这种情况:`r'(<textarea.*?>).*(</ textarea>)'` (3认同)