2010-01-19 10 views
14

अभिवादन सब,अजगर re.sub सवाल

मुझे यकीन है कि अगर यह संभव हो सकता है नहीं कर रहा हूँ, लेकिन मैं एक regex प्रतिस्थापन में मिलान समूहों का उपयोग करने के लिए चर कॉल करना चाहते हैं।

a = 'foo' 
b = 'bar' 

text = 'find a replacement for me [[:a:]] and [[:b:]]' 

desired_output = 'find a replacement for me foo and bar' 

re.sub('\[\[:(.+):\]\]',group(1),text) #is not valid 
re.sub('\[\[:(.+):\]\]','\1',text) #replaces the value with 'a' or 'b', not var value 

विचार?

+0

हेक्टेयर! ज़रुरी नहीं। पाई, perl और php से परिचित - किसी के मालिक नहीं। आपकी मदद के लिए धन्यवाद :) – netricate

उत्तर

24

आप एक कॉलबैक जब re.sub का उपयोग कर निर्दिष्ट कर सकते हैं, जो समूहों की पहुंच है: http://docs.python.org/library/re.html#text-munging

a = 'foo' 
b = 'bar' 

text = 'find a replacement for me [[:a:]] and [[:b:]]' 

desired_output = 'find a replacement for me foo and bar' 

def repl(m): 
    contents = m.group(1) 
    if contents == 'a': 
     return a 
    if contents == 'b': 
     return b 

print re.sub('\[\[:(.+?):\]\]', repl, text) 

इसके अलावा अतिरिक्त नोटिस? नियमित अभिव्यक्ति में। आप यहां लालची से मेल खाना चाहते हैं।

मुझे लगता है कि यह एक अवधारणा को चित्रित करने के लिए सिर्फ नमूना कोड है, लेकिन आपके द्वारा दिए गए उदाहरण के लिए, सरल स्ट्रिंग स्वरूपण बेहतर है।

+0

धन्यवाद! यह वास्तव में जो मैं सोच रहा था उसके करीब है। – netricate

+2

मैंने आपके प्रश्न का उत्तर दिया, लेकिन मुझे लगता है कि आप गलत सवाल पूछ रहे थे। उचित होने पर, कृपया नियमित अभिव्यक्तियों के लिए वरीयता में स्ट्रिंग स्वरूपण का उपयोग करें। नौफल इब्राहिम ने उस प्रश्न का उत्तर दिया जो आपको पूछना चाहिए था। –

+0

रिटर्न स्टेटमेंट में उद्धरण चिह्नों को न भूलें। :) –

8

ओवरकिल की तरह लगता है। ऐसा क्यों न करें

text = "find a replacement for me %(a)s and %(b)s"%dict(a='foo', b='bar') 

?

+0

टेक्स्ट डीबी में संग्रहीत किया जाता है। मुझे लगता है कि मैं सभी [[::]] मानों को%() मानों के साथ प्रतिस्थापित कर सकता हूं और इसे काम करना चाहिए। मै उसे करने की एक कोशिश तो करूंगा। धन्यवाद! – netricate

+0

यह विधि इस बात पर निर्भर करती है कि आप [[: a:]] और [[: b:]] की स्थिति जानते हैं या नहीं। – ghostdog74

+0

बहुत सारे मुद्दे हैं लेकिन ओपी क्या करने की कोशिश कर रहा है वह अवधारणात्मक रूप से स्ट्रिंग स्वरूपण के समान है। कोड के लिए –

2
>>> d={}             
>>> d['a'] = 'foo'          
>>> d['b'] = 'bar' 
>>> text = 'find a replacement for me [[:a:]] and [[:b:]]' 
>>> t=text.split(":]]") 
>>> for n,item in enumerate(t): 
... if "[[:" in item: 
...  t[n]=item[: item.rindex("[[:") +3 ] + d[ item.split("[[:")[-1]] 
... 
>>> print ':]]'.join(t) 
'find a replacement for me [[:foo:]] and [[:bar:]]' 
+0

इस पर एक और देखने के लिए धन्यवाद। बहुत ही शांत! :) – netricate

संबंधित मुद्दे