2013-05-05 5 views
15

मेरी regex में पैटर्न कुछ इस तरह है। यदि यह एक सामान्य कैप्चर समूह था, तो मैं सिर्फ यह जांच सकता था कि कैप्चर समूह समूह/समूह के बिना समूह की संख्या से अधिक हैं या नहीं, लेकिन मेरे पास विकल्प नहीं है।कैसे नामांकित कैप्चर समूह मौजूद है या नहीं?</p> <pre><code>@"Something(d+, ""(.+)""(, .{1,5}, d+, (?<somename>d+)?)," </code></pre> <p>तो मैं यह जानना चाहते हैं <code><somename></code> मौजूद चाहते हैं:

क्या कोई मुझे इस तरह से रास्ता खोजने में मदद कर सकता है? मुझे इसे कुशल होने की आवश्यकता नहीं है, यह सिर्फ एक बार के कार्यक्रम के लिए है जिसका उपयोग सॉर्टिंग के लिए किया जाता है, इसलिए मुझे कोई फर्क नहीं पड़ता कि इसे चलाने में थोड़ा सा समय लगता है। यह सार्वजनिक कोड के लिए नहीं होने वाला है।

उत्तर

23
के अनुसार

documentation:

तो समूहनाम संग्रह में एक कैप्चरिंग समूह का नाम नहीं है, या यदि समूहनाम एक कैप्चरिंग समूह है कि इनपुट स्ट्रिंग में मिलान नहीं किया गया का नाम है , विधि समूह ऑब्जेक्ट लौटाती है जिसका समूह। सिक्योरिटी संपत्ति गलत है और जिसका समूह। वैल्यू प्रॉपर्टी स्ट्रिंग। लक्षण है।

var regex = new Regex(@"Something\(\d+, ""(.+)""(, .{1,5}, \d+, (?<somename>\d+)?\),"); 
var match = regex.Match(input); 
var group = match.Groups["somename"]; 
bool exists = group.Success; 
+2

मैं एक IndexOutOfRangeException उम्मीद कर रहा था। इसे आजमाया जाना चाहिए था। बेवकूफ। धन्यवाद! +1। –

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