2009-02-13 22 views
5

के लिए फ़ंक्शन के परिणाम का उपयोग करके पाइथन मेरे पास टेक्स्ट का एक ब्लॉक है, और प्रत्येक रेगेक्स मैच के लिए, मैं उस मैच को किसी अन्य फ़ंक्शन से वापसी मान के साथ प्रतिस्थापित करना चाहता हूं। इस समारोह के लिए तर्क निश्चित रूप से मिलान पाठ है।नियमित अभिव्यक्ति प्रतिस्थापन

मुझे इस समस्या के एक पास समाधान के साथ आने का प्रयास करने में परेशानी हो रही है। ऐसा लगता है कि यह बहुत आसान होना चाहिए।

उत्तर

14

the documentation से अधिकार:

>>> def dashrepl(matchobj): 
...  if matchobj.group(0) == '-': return ' ' 
...  else: return '-' 
>>> re.sub('-{1,2}', dashrepl, 'pro----gram-files') 
'pro--gram files' 
+0

अरे, मैंने अभी माना है कि यह उस कार्य में एक स्ट्रिंग हो सकता है – esiegel

0

अजगर-अज्ञेयवाद: पहले और सब कुछ अपने पाठ को बदलने के लिए के बाद सब कुछ का मिलान करें।

/^(.*?)(your regexp to match)(.*)$/ 

तब आपके पास टेक्स्ट के पहले और बाद में आप प्रतिस्थापित करने जा रहे हैं। बाकी आसान है - बस दो चरणों के बीच अपने फ़ंक्शन का परिणाम डालें।

+0

ओपी ने "हर मैच के लिए" कहा, इसलिए आपने केवल आधे एल्गोरिदम का वर्णन किया। किसी भी मामले में, उचित उत्तर दिया गया है और चुना गया है। – tzot

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