2011-07-14 23 views
7

मैं इस तरह एक नियमित अभिव्यक्ति के साथ प्रत्येक मैच की जगह:एक अलग शब्द

findthe = re.compile(r" the ") 
replacement = ["firstthe", "secondthe"] 
sentence = "This is the first sentence in the whole universe!" 

मुझे क्या करना कोशिश कर रहा हूँ एक सूची से एक संबद्ध प्रतिस्थापन शब्द के साथ प्रत्येक घटना को बदलने के लिए है, इसलिए अंत वाक्य होगा कि इस तरह दिखेगा:

>>> print sentence 
This is firstthe first sentence in secondthe whole universe 

मैं प्रतिस्थापन से अधिक की गणना पाश के लिए एक के अंदर re.sub उपयोग करने की कोशिश, लेकिन यह re.sub रिटर्न सभी घटनाओं की तरह दिखता है। क्या कोई मुझे बता सकता है कि यह कुशलतापूर्वक कैसे करें?

उत्तर

6

यह regex का उपयोग करने के लिए की तुलना में आप निम्नलिखित कोड का उपयोग करने की कोशिश कर सकते की आवश्यकता नहीं है, तो:

replacement = ["firstthe", "secondthe"] 
sentence = "This is the first sentence in the whole universe!" 

words = sentence.split() 

counter = 0 
for i,word in enumerate(words): 
    if word == 'the': 
     words[i] = replacement[counter] 
     counter += 1 

sentence = ' '.join(words) 

या कुछ इस तरह भी काम करेगा:

import re 
findthe = re.compile(r"\b(the)\b") 
print re.sub(findthe, replacement[1],re.sub(findthe, replacement[0],sentence, 1), 1) 

और कम से कम:

re.sub(findthe, lambda matchObj: replacement.pop(0),sentence) 
+0

दुर्भाग्यवश, प्रतिस्थापन तर्क मेरे लिए थोड़ा और जटिल है। जो मैंने प्रदान किया है वह एक टेस्ट केस है। मेरे मामले में, 10-20 '' हो सकता है। यह अभी भी आपकी विधि का उपयोग करके किया जा सकता है लेकिन मैं एक और संक्षिप्त दृष्टिकोण की तलाश में हूं। लेकिन आपकी मदद के लिए +1। – Legend

+0

धन्यवाद - अंतिम एक समाधान की जांच करें। –

+0

बस कमाल है! आपके समय के लिए आपका फिर से शुक्रिया। – Legend

2

आप के रूप में पैरामीटर को बदलना एक कॉलबैक फ़ंक्शन का उपयोग कर सकते हैं, देखते हैं कि कैसे पर:

http://docs.python.org/library/re.html#re.sub

फिर कुछ काउंटर का उपयोग करें और काउंटर मूल्य के आधार पर बदल दें।

+0

खाली किए बिना इसे करने का एक तरीका यहां दिया गया है। मैं अब इसके साथ खेलूँगा और वापस आऊंगा। – Legend

4

आर्टिओम का अंतिम उत्तर replacement चर का विनाशकारी है। replacement

re.sub(findthe, lambda m, r=iter(replacement): next(r), sentence) 
+0

+1। धन्यवाद। – Legend

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