2016-04-14 11 views
0

ile eşleşen tüm dizeleri değiştirin. Bir belgeye sahip olduğum bir jinja şablonunda görüntülemeye çalışıyorum. Bu negxxx string xxxneg<span class="SomeCssClass_neg_xxx"> string </span> olması gerektiği gibi dize yerine çalışıyorum. Sorun, kullanıyorum \1 numaralandırılan eşleşen gruptur. Bildiğim kadarıyla sadece birden fazla eşleşme var 1. yardıma ihtiyacım var.python regex

import re 
StringIn = 'negxxx data1 xxxneg out of span negxxx data2 xxxneg negzzz data1 zzzneg out of span negzzz data2 zzzneg' 
StringIn = re.sub(r"negxxx(.*)xxxneg", r"<span class='neg_xxx'>\1</span>" , StringIn) 
StringIn = re.sub(r"negzzz(.*)zzzneg", r"<span class='neg_zzz'>\1</span>" , StringIn) 
print StringIn 

alıyorum:

doğru değil
<span class='neg_xxx'> data1 xxxneg out of span negxxx data2 </span> <span class='neg_zzz'> data1 zzzneg out of span negzzz data2 </span> 

ne ihtiyacım şudur: .*

<span class='neg_xxx'> data1 </span> out of span <span class='neg_xxx'> data2 </span><span class='neg_zzz'> data1 </span> out of span <span class='neg_zzz'> data2 </span> 
+0

ben ** ninja ** şablon olarak okuyun. 12 –

+1

Bana vahşi bir tahmin yapalım. Tembel '?' Niceleyici ile deneyin. '. *' çok fazla eşleşiyor. '. *?' Kullanın. –

cevap

0

dizenin sonuna kadar yarış ve sadece en yakın yedekliyor (dizgenin sonuna) "xxxneg". desen geri kalanı maç deneyin sadece bir kerede bir karakter yemek ve bir tembel nicelik, .*?, kullanın: Bir saniye için

import re 
StringIn = 'negxxx data1 xxxneg out of span negxxx data2 xxxneg negzzz data1 zzzneg out of span negzzz data2 zzzneg' 
StringIn = re.sub(r"negxxx(.*?)xxxneg", r"<span class='neg_xxx'>\1</span>" , StringIn) 
StringIn = re.sub(r"negzzz(.*?)zzzneg", r"<span class='neg_zzz'>\1</span>" , StringIn) 
print StringIn 
+0

negxxx bazı veriler \ n xxxneg ile çalışmadı, çalışmadı. Baska öneri ? – Hakim