.net - How do you get the group name of a regex? -
मेरे पास एक regex था, जैसे:
(? & Lt; one-1 & gt; बिल्ली) | (? & Lt; दो-2 & gt; कुत्ता) | (? & Lt; तीन-3 & gt; माउस) | (? & Lt; चार -4 & gt; मछली)
जब मैंने कोशिश की इस पैटर्न को एक। नेट ऐप में उपयोग करें, यह विफल हुआ, क्योंकि समूह का नाम इसमें '-' था
अतः, एक वैकल्पिक हल के रूप में, मैंने दो regexes का उपयोग करने की कोशिश की, सबसे पहला:
(? & Lt; ए & gt; बिल्ली) | (? & Lt; Be & gt; dog) | (? & Lt; C & gt; माउस) | (? & Lt; डी & gt; मछली)
उन मूल मामलों से मेल खाएगा जिन्हें मैं नियंत्रित कर सकता समूह नामों में देख रहा था।
और फिर , मैं इस तरह से एक में उस regex से सही मिलान समूह नाम का उपयोग करने का इरादा:
(? & Lt; ए & gt; एक -1) | (? & Lt; बी & gt; दो -2) | (? & Lt; C & gt; तीन-3) | (? & Lt; डी & gt; चौ -4)
मैं ऐसा करूँगा जो इस पद्धति से मेल खाती है और यह निर्धारित करने के लिए कि समूह नाम बराबर थे।
मुझे पता है कि यह थोड़ा जटिल है।
निम्नलिखित की तर्ज पर कुछ है?
{"तीन -3", "माउस"}, {"चार-चार", "कुत्ते"}, {"चार- 4 "," मछली "},}; Var regex = buildRegex (पैटर्न); स्ट्रिंग [] परीक्षण = {"फू", "कुत्ता", "बार", "मछली"}; फॉरचाच (टेस्ट में विभिन्न टी) {var m = regex.Match (टी); कंसोल.प्रकाश रेखा ("{0}: {1}", टी, रिपोर्ट मैच (रेगेक्स, मी)); }
आउटपुट
foo: कोई भी मैच कुत्ता नहीं है: दो-दो = कुत्ता बार: कोई भी मैच फिश नहीं: चार -4 = मछली
पहले हम समूह के नामों से बचकर और पैटर्नों के साथ संयोजन करके एक Regex
उदाहरण बनाते हैं कोई भी गैर-शब्द वर्ण अनुक्रम _nnn _
से बदल दिया गया है जहां nnn इसका UTF-32 मान है।
निजी स्थिर Regex buildRegex (स्ट्रिंग [,] इनपुट) {string regex = ""; (इंट आई = 0; आई & lt; = inputs.GetUpperBound (0); i ++) {var part = String.Format ("(? & Lt; {0} & gt; {1})", Regex.Replace (इनपुट [ I, 0], @ "([\ W_]), नया मैचइवल्यूलेटर (एस्केप)), इनपुट [आई, 1]); Regex + = (regex.Length! = 0? "|": "") + हिस्सा; } नए रेगेक्स (regex) लौटें; } निजी स्थिर स्ट्रिंग एस्केप (मैच मी) {वापसी "_" + Char.ConvertToUtf32 (एम। समूह [1]। वैल्यू, 0) + "_"; }
मैचों के लिए, .NET लाइब्रेरी हमें एक समूह का नाम प्राप्त करने का आसान तरीका नहीं देता है, इसलिए हमें दूसरे तरीके से जाना होगा: प्रत्येक समूह नाम के लिए, हम जांच करते हैं कि क्या उस समूह का मिलान किया गया और यदि उसका नाम अनसस्केप हो और कॉलर को दोनों नाम और कैप्चर किए गए सबिंगिंग को पता दो।
निजी स्थिर स्ट्रिंग रिपोर्ट मैच (रेगेक्स रेगेक्स, मैच मी) {if (! M.Success) वापस "कोई मुकाबला नहीं"; विदेशी मुद्रा (regex.GetGroupNames () में var नाम) {if (नाम! = "0" और amp; amp; एम.समूह [नाम]। मूल्य। लैंग & gt; 0) वापसी स्ट्रिंग.फ़ॉर्मेट ("{0} = {1 } ", Regex.Replace (नाम, @" _ (\ d +) _ ", नया मैचइवल्यूलेटर (अनसेस्पेप)), एम। समूह [नाम]। वेल्यू); } वापसी नल; } निजी स्टैटिक स्ट्रिंग अनसेस्पेप (मैच मी) {return Char.ConvertFromUtf32 (int.Parse (m.Groups [1]। वेल्यू)); }
Comments
Post a Comment