给定字符串:
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>