2017-05-17 10 views
1

와 문자열을 감안할 때 :.비 욕심이 일치 *^

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? 내가 re.sub('\^.*\^', 'PLACEXHOLDER', s) 시도했습니다

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

하지만 .* 욕심이며, ^f('y')[f('x').get()]^? and ^f('barbar')^ 출력과 일치 :

원하는 출력은 당신이 PLACEXHOLDER 바 foo는 이유는 무엇

으로 인코딩 된 알 수없는 번호의 하위 문자열이 여러 개있을 수 있으므로 하드 코딩되지 않습니다. d가 아닙니다. esired :

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

답변

4

별 뒤에 물음표를 추가하면 욕심을 느끼지 않게됩니다.

\^.*?\^ 

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> 
로 대체