2009-06-29 10 views
14

मैं वर्तमान में सी # में एक खिलौना असेंबलर बना रहा हूं (The Elements Of Computing Systems पुस्तक के माध्यम से जा रहा है)।रेगेक्स - एक चरित्र से पहले एक पैटर्न मिलान करें

मुझे एक बहुत ही सरल पैटर्न से मेल खाना चाहिए, मैंने सोचा कि यह कुछ रेगेक्स सीखने का अच्छा समय होगा लेकिन मैं संघर्ष कर रहा हूं!

निम्न उदाहरणों में मैं सिर्फ '='

एम से पहले पत्र से मेल करना चाहते हैं = एक

डी = एम

एमडी = एक

एक = डी

ई = एम

एएमडी = एक

+०१२३५१६४१०

मैं निम्नलिखित के साथ आ गया है:

([A-Z]{1,3})= 

हालांकि यह भी मेल खाता है '=' है जो मैं नहीं चाहता।

मैं भी करने की कोशिश की:

([A-Z^\=]{1,3})= 

लेकिन मैं अभी भी एक ही समस्या है - यह एक से मेल खाता है '=' के साथ-साथ साइन इन करें।

मैं अपने regexes का परीक्षण करने के लिए this site का उपयोग कर रहा हूँ।

किसी भी मदद की वास्तव में सराहना की जाएगी। अग्रिम धन्यवाद।

+0

आपको भी समूह प्राप्त करने की आवश्यकता है [1]। Value.ToStrin जी() के लिए उचित खंड प्राप्त करने के लिए = साइन – DevelopingChris

उत्तर

26

क्या आप चाहते हैं एक शून्य चौड़ाई, अग्रदर्शी अभिकथन कहा जाता है। आप कार्य करें:

 
(Match this and capture)(?=before this) 

आपके मामले में, यह होगा:

 
([A-Z^]{1,3})(?==) 
4

निम्नलिखित इच्छा समूह से पहले सब कुछ के बाद "=" और सब कुछ।

मैच पात्रों में से किसी भी राशि thats नहीं एक "=", द्वारा एक "=" पीछा किया, तो पात्रों में से किसी भी राशि thats नहीं एक "=":

([^=]*)=([^=]*) 

यह कुछ इस तरह पढ़ता है।

+0

मैंने आपके regex को http://www.nregex.com/nregex/default.aspx में करने की कोशिश की है यह काम नहीं प्रतीत होता है- साइट का उपयोग करने वाले रेगेक्स इंजन के साथ कुछ हो सकता है? वैसे भी मैंने अब एक जवाब चिह्नित किया है इसलिए चिंता न करें। हालांकि धन्यवाद। – bplus

+0

इस नियमित अभिव्यक्ति के साथ समस्या यह हो सकती है कि, यदि यह मल्टीलाइन है, तो दूसरा वाइल्डकार्ड वर्तमान बराबर चिह्न, नई लाइन, और फिर अगले बराबर चिह्न से पहले वर्णों के बाद भाग से मेल खाता है। आप स्क्वायर ब्रैकेट की दूसरी जोड़ी के अंदर डेलीमीटर चरित्र जोड़ना चाहते हैं। –

0

आप बराबर चिह्न को गैर-कैप्चरिंग पैरान्स में भी जोड़ सकते हैं (?: ...)

([ADM]{1,3})(?:=) 

यह एक सा हो गया है के बाद से मैं पुस्तक के इस अध्याय की थी, लेकिन मुझे लगता है कि जब से तुम अभिव्यक्ति के दोनों भागों वैसे भी जरूरत है, मैं = myArray [0] == एम जिसका परिणाम पर एक विभाजन किया , myArray [1]

+0

गैर-कैप्चरिंग माता-पिता कुछ भी उपयोगी नहीं करेंगे। समान मिलान के हिस्से के रूप में बराबर चिह्न अभी भी "कब्जा" होगा, जो ओपी से बचने की कोशिश कर रहा था। –

-2

मैंने पहले '=' तो मैं इस

.*(?==)= 

मैचों के साथ हर चरित्र से पहले '=' आया हर चरित्र से मेल करने के लिए आवश्यक है, लेकिन नहीं "="

==
+0

प्रश्न पहले ही पर्याप्त रूप से उत्तर दिया गया था, और मैंने आपकी अभिव्यक्ति के खिलाफ अभी भी '==' मिलान किया है, इसलिए यह काम नहीं कर रहा है। हालांकि भाग लेने के लिए धन्यवाद। –

+0

अब, जब मैंने व्यवहार को उचित उत्तर से तुलना की, तो मुझे लगता है कि ओपी क्या चाहता था। – Tola

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