2009-12-05 11 views
20

मेरे पास 15 वर्णों के तार हैं। मैं नियमित अभिव्यक्ति के साथ उस पर कुछ पैटर्न मिलान कर रहा हूं। मैं सबस्ट्रिंग की स्थिति जानना चाहता हूं जहां IsMatch() फ़ंक्शन सत्य लौटाता है।क्या कोई ऐसा फ़ंक्शन है जो इंडेक्स लौटाता है जहां RegEx मैच शुरू होता है?

प्रश्न: क्या कोई ऐसा कार्य है जो मैच की अनुक्रमणिका देता है?

+0

क्या आपका मतलब है संग्रह में एक मिलान की अनुक्रमणिका _in_ स्ट्रिंग या अनुक्रमणिका _of_ संग्रह में एक स्ट्रिंग स्ट्रिंग? स्ट्रिंग में –

+0

मिलान की अनुक्रमणिका ... – Royson

उत्तर

33

कई मैचों आप इस के समान कोड का उपयोग कर सकते के लिए:

Regex rx = new Regex("as"); 
      foreach (Match match in rx.Matches("as as as as")) 
      { 
       int i = match.Index; 
      } 
9

IsMatch का उपयोग करने के बजाय, Matches विधि का उपयोग करें। यह MatchCollection वापस करेगा, जिसमें Match ऑब्जेक्ट्स शामिल हैं। इनकी संपत्ति Index है।

7

IsMatch के बजाय मैच का उपयोग करें:

Match match = Regex.Match("abcde", "c"); 
    if (match.Success) 
    { 
     int index = match.Index; 
     Console.WriteLine("Index of match: " + index); 
    } 

आउटपुट:

Index of match: 2 
3
Regex.Match("abcd", "c").Index 

2 

नोट # Match.success का परिणाम जाँच करना चाहिए, क्योंकि इसके बदले 0, और स्थिति के साथ भ्रमित कर सकते हैं 0, कृपया मार्क बियर उत्तर का संदर्भ लें। धन्यवाद।

+0

ध्यान दें कि यदि रीगेक्स मेल नहीं खाता है तो यह 0 देता है, जो शायद आप नहीं चाहते हैं। आपको मैच की जांच करनी चाहिए। पहले असफल करें (मेरा जवाब देखें)। इंगित करने के लिए –

+0

Thx। – YOU

-3
Console.Writeline("Random String".IndexOf("om")); 

हो जाएगा ताकि उत्पादन एक 4

एक -1 कोई मुकाबला नहीं

+1

प्रश्न "नियमित अभिव्यक्ति के साथ पैटर्न मिलान" के बारे में पूछता है। 'इंडेक्सऑफ' पैटर्न का समर्थन नहीं करता है, केवल सरल स्ट्रिंग्स। –

0
के बजाय का उपयोग

IsMatch(), उपयोग इंगित करता है Matches:

 const string stringToTest = "abcedfghijklghmnopqghrstuvwxyz"; 
     const string patternToMatch = "gh*"; 

     Regex regex = new Regex(patternToMatch, RegexOptions.Compiled); 

     MatchCollection matches = regex.Matches(stringToTest); 

     foreach (Match match in matches) 
     { 
      Console.WriteLine(match.Index); 
     } 
संबंधित मुद्दे