2013-06-17 4 views
5

पायथन 3 में रेगेक्स या किसी अन्य लाइब्रेरी का उपयोग करके दो बिंदुओं के बीच स्ट्रिंग कैसे प्राप्त करें?पायथन 3 regex का उपयोग कर दो बिंदुओं के बीच स्ट्रिंग कैसे प्राप्त करें?

उदाहरण के लिए: ब्ला blah एबीसी स्ट्रिंग XYZ ब्ला ब्ला

पुनः प्राप्त किया जा करने के लिए

एबीसी और XYZ चर जो आरंभ और स्ट्रिंग जो मैं पुनः प्राप्त करने के लिए है के अंत को निरूपित कर रहे हैं।

उत्तर

4

उपयोग ABC और XYZ लुक-पीछे और देखो आगे वक्तव्य दिये एंकर के रूप में:

(?<=ABC).*?(?=XYZ) 

(?<=...) लुक-पीछे दावे केवल पाठ कि ABC से पहले किया गया था में स्थान पर मेल खाता है। इसी प्रकार, (?=XYZ) उस स्थान पर मेल खाता है जो XYZ के बाद होता है। साथ में वे दो एंकर बनाते हैं जो .* अभिव्यक्ति को सीमित करते हैं, जो कुछ भी मेल खाता है।

आप re.findall() साथ पाठ के सभी तरह के लंगर टुकड़े पा सकते हैं:

for matchedtext in re.findall(r'(?<=ABC).*?(?=XYZ)', inputtext): 

तो ABC और XYZ चर रहे हैं, तो आप re.escape() उपयोग करने के लिए (नियमित अभिव्यक्ति वाक्य रचना के रूप में व्याख्या किए जाने से उनकी सामग्री के किसी भी रोकने के लिए) चाहते हैं उन्हें और लगाना पर:

re.match(r'(?<={}).*?(?={})'.format(abc, xyz), inputtext) 
+0

धन्यवाद बहुत @Martijin यह काम करता है: डी – sgp

2

मुझे लगता है कि यह तुम क्या चाहते है:

import re 
match = re.search('ABC(.*)XYZ','Blah blah ABC the string to be retrieved XYZ Blah Blah') 
print match.group(1) 
+1

अच्छा तरीका है, लेकिन * एबीसी (... XYZ ...) जैसे कुछ मिलान नहीं करना चाहते हैं, तो यह मात्रात्मक आलसी बनाने के बाद एक प्रश्न चिह्न जोड़ें। XYZ' –

+0

@ उपयोगकर्ता 1572508 एबीसी और एक्सवाईजेड उपयोगकर्ता – sgp

+0

से लिया जाने वाला चर हैं। यह Python2 के लिए काम कर सकता है, नहीं 3. – Ooker

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