给定字符串:

s = "Why did you foo bar a <b>^f('y')[f('x').get()]^? and ^f('barbar')^</b>"


如何用字符串替换^f('y')[f('x').get()]^^f('barbar')^,例如PLACEXHOLDER

所需的输出是:

Why did you foo bar a <b>PLACEXHOLDER? and PLACEXHOLDER</b>


我试过re.sub('\^.*\^', 'PLACEXHOLDER', s).*是贪婪的,它匹配^f('y')[f('x').get()]^? and ^f('barbar')^并输出:

您为什么foo禁止PLACEXHOLDER

可能有多个由\^编码的未知数字的子字符串,因此不需要对此进行硬编码:

re.sub('(\^.+\^).*(\^.*\^)', 'PLACEXHOLDER', s)

最佳答案

如果在星号后面添加问号,它将使其不贪心。

\^.*?\^


http://www.regexpal.com/?fam=97647

Why did you foo bar a <b>^f('y')[f('x').get()]^? and ^f('barbar')^</b>


正确替换为

Why did you foo bar a <b>PLACEXHOLDER? and PLACEXHOLDER</b>

10-06 00:24