2010-04-26 17 views
11

आप चर का उपयोग करते हैं (यह है कि सही शब्द?) इस तरह अजगर नियमित अभिव्यक्ति में: "(? पी \ w +) blah" (चर "मूल्य" होगा), कैसे कर सकते थे आप वेरिएबल का मान पंक्ति के अंत में या एक निश्चित चरित्र चर के वास्तविक सामग्री के लिए किसी भी ध्यान नहीं करने के लिए "blah" के बाद पाठ हो सकते हैं। उदाहरण के लिए, यह मैं चाहता हूं कि यह छद्म कोड है:अजगर नियमित अभिव्यक्ति नाम के समूहों को असाइन

>>> import re 
>>> p = re.compile("say (?P<value>continue_until_text_after_assignment_is_recognized) endsay") 
>>> m = p.match("say Hello hi yo endsay") 
>>> m.group('value') 
'Hello hi yo' 

नोट: शीर्षक शायद समझ में नहीं आता है। ऐसा इसलिए है क्योंकि मुझे नहीं पता था कि यह कैसे कहें। क्षमा करें अगर मैंने कोई भ्रम पैदा किया।

+0

मैं थोड़ा अपने शीर्षक तय है, लेकिन मुझे लगता है कि अपने कोड उदाहरण जैसे आप चाहते हैं से स्पष्ट हो गया था (कम से कम, मुझे आशा है कि मैं यह सही व्याख्या)। –

+0

एफवाईआई, कोष्ठक के बीच की सामग्री को "समूह" कहा जाता है। आपके उदाहरण 'मान' में एक नाम है। तो, आप एक "नामित समूह" से मेल खाते हैं। – Stephen

उत्तर

12

कि के लिए आप किसी भी अवधि के चरित्र से मेल खाता है

"say (?P<value>.+) endsay" 

की एक नियमित अभिव्यक्ति चाहते हैं, और धन चिह्न इंगित करता है कि एक या अधिक बार दोहराया जाना चाहिए ... इसलिए .+ के किसी भी क्रम का मतलब एक या अधिक पात्र जब आप अंत में endsay शब्दों में कहें, नियमित अभिव्यक्ति इंजन लगता है कि जो कुछ भी यह मेल खाता है तथ्य यह है कि स्ट्रिंग के साथ समाप्त करता है कर देगा।

+0

पूरी तरह से काम किया! धन्यवाद। – None

10

आप आप क्या हुआ अगर पाठ उदाहरण के लिए, मिलान करना चाहते हैं निर्दिष्ट करने की आवश्यकता,

say hello there and endsay but some more endsay 

आप, पूरे hello there and endsay but some more सबस्ट्रिंग मिलान करने के लिए @ डेविड का जवाब सही है चाहते हैं। अन्यथा, बस hello there and मिलान करने के लिए, पैटर्न होने की जरूरत है:

say (?P<value>.+?) endsay 
एक प्रश्न चिह्न के साथ

के बाद धन चिह्न बनाने के लिए यह गैर लालची (डिफ़ॉल्ट रूप से यह लालची है, सब यह संभवतः कर सकते हैं अप gobbling जबकि एक समग्र मैच की इजाजत दी, गैर लालची यह रूप में थोड़ा संभव के रूप में gobbles, फिर से एक समग्र मैच की अनुमति) का अर्थ है।

+0

मुझे लगता है कि के बारे में सोचा लेकिन पंक्ति के अंत में मिलान के बारे में ओ पी की बात को देखते हुए, यह एक लालची ऑपरेटर तरह लग रहा था उपयुक्त होगा। फिर भी, +1। –