2010-01-22 16 views
8

नियमित अभिव्यक्तियों का उपयोग करके मैं सी # में नामों के साथ समूह कैसे बना सकता हूं, और क्या यह अच्छी प्रथा है?नियमित अभिव्यक्ति नामित समूह: अच्छा या बुरा?

अग्रिम धन्यवाद।

(?<TagName>.*) 

मैं बिल्कुल लगता है कि यह अच्छा अभ्यास है:

उत्तर

7

समूह एक टैग नाम दें। गौर करें कि जब आप नियमित अभिव्यक्ति बदलते हैं तो क्या होता है। यदि आप डेटा खींचने के लिए इंडेक्स का उपयोग करते हैं, तो इन समूहों का क्रम बदल सकता है। उन्हें नाम देकर, आप उस डेटा को निर्दिष्ट कर रहे हैं जो आपको लगता है कि समूह में शामिल है, इसलिए यह स्वयं-दस्तावेज का एक रूप भी है।

+2

वैकल्पिक वाक्यविन्यास '(? 'टैगनाम'। *)' है। –

+0

उत्तर के लिए बहुत बहुत धन्यवाद। मुझे नहीं पता कि मैंने क्यों सोचा कि यह बुरा होगा। – Payne

1

नामित कैप्चर समूहों अच्छे हैं, आमतौर पर सरल regex के संख्यात्मक कब्जा समूह का उपयोग कर के साथ यद्यपि शायद और अधिक streamliney है, यहां कुछ युक्तियां:

http://www.regular-expressions.info/named.html

+0

आपके उत्तर के लिए और लिंक के लिए बहुत बहुत धन्यवाद। – Payne

2

के रूप में अन्य लोगों ने बताया है वाक्य रचना (?<GroupName>....) है।

यहाँ एक उदाहरण का प्रदर्शन एक समूह Key बुलाया बनाने का तरीका बताया और एक समूह Value कहा जाता है, और भी उतना ही महत्वपूर्ण है (लेकिन अक्सर भूल) - कैसे जिसके परिणामस्वरूप मैच वस्तु से नाम से समूहों को निकालने के लिए:

string s = "foo=bar/baz=qux"; 
Regex regex = new Regex(@"(?<Key>\w+)=(?<Value>\w+)"); 
foreach (Match match in regex.Matches(s)) 
{ 
    Console.WriteLine("Key = {0}, Value = {1}", 
     match.Groups["Key"].Value, 
     match.Groups["Value"].Value); 
} 

मैं आमतौर पर नामित समूहों का उपयोग बहुत सरल अभिव्यक्तियों के लिए नहीं करता, उदाहरण के लिए यदि केवल एक समूह है।

जटिल अभिव्यक्ति वाले कई समूहों के साथ अधिक जटिल नियमित अभिव्यक्तियों के लिए, शायद नामित समूहों का उपयोग करना एक अच्छा विचार होगा। दूसरी तरफ, यदि आपकी नियमित अभिव्यक्ति इतनी जटिल है कि आपको ऐसा करने की ज़रूरत है, तो यह देखने के लिए एक अच्छा विचार हो सकता है कि आप किसी अन्य तरीके से समस्या का समाधान कर सकते हैं या इसे अपने एल्गोरिदम को छोटे, सरल चरणों में विभाजित कर सकते हैं ।

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