2012-12-20 8 views
5

मान लें एक पाठ है, जो नीचे की तरह है कि वहाँ:एक सख्त पाठ में पाठ का विशिष्ट भाग रही

string str = @"stackoverflow(ढेर:stackoverflow)overstackflow(:stackoverflow)";

से अधिक मैं बोल्ड क्षेत्रों प्राप्त करना चाहते हैं। पाठ में और उनमें से बीच पाठ मिलता है नहीं यह

किसी भी सलाह इस पोस्ट पर

+0

आप अपने स्ट्रिंग के बीच में बैकटिक मतलब है? फिलहाल वे आपके टैग को अन-कोड कर रहे हैं। – Rawling

+0

मान लीजिए कि एक टेक्स्ट है और मैं टेक्स्ट को बीच में प्राप्त करना चाहता हूं (और: ऑपरेटर। मैं इसे कैसे कर सकता हूं? –

+0

क्या आप हाँ/कोई जवाब नहीं प्राप्त करना चाहते हैं? इसे स्वयं क्यों न करें? – slawekwin

उत्तर

6

शायद का उपयोग कर सकते हैं:

IList<String> foundStrings = new List<String>(); 
int currentIndex = 0; 
int index = str.IndexOf("(", currentIndex); 
while(index != -1) 
{ 
    int start = index + "(".Length; 
    int colonIndex = str.IndexOf(":", start); 
    if (colonIndex != -1) 
    { 
     string nextFound = str.Substring(start, colonIndex - start); 
     foundStrings.Add(nextFound); 
    } 
    currentIndex = start; 
    index = str.IndexOf("(", currentIndex); 
} 

Demo

+0

धन्यवाद टिम श्मेलर, यह वास्तव में अच्छा है .. –

+0

@Tim क्या आप केवल [ideone.com] (http://ideone.com) का उपयोग करते हैं जब आप SO में जवाब देते हैं, या विजुअल स्टूडियो का उपयोग करते हैं? क्या विचार है तेज़? –

+0

@ सोनर गॉनूल: केवल डेमो प्रयोजनों के लिए। यह तेज़ नहीं है, यह मोनो का उपयोग करता है जिसमें कई सीमाएं हैं। –

1

देखो और आप जवाब पा सकते हैं: मुझे लगता है कि मैं खोजने के लिए "(" और ""।? ।

How do I extract text that lies between parentheses (round brackets)?

आप केवल कि नियमित अभिव्यक्ति के लिए छोटे परिवर्तन करने की जरूरत है।

1
string strRegex = @"\((.+?)\:"; 
RegexOptions myRegexOptions = RegexOptions.None; 
Regex myRegex = new Regex(strRegex, myRegexOptions); 
string strTargetString = @"stackoverflow(stack:stackoverflow)overstackflow(over:stackoverflow)"; 

foreach (Match myMatch in myRegex.Matches(strTargetString)) 
{ 
    if (myMatch.Success) 
    { 
    // Add your code here 
    } 
} 
यह सब कुछ है कि group1(group2:group3) ऐसा दिखाई देता है इनपुट के माध्यम से दिखेगा

Regex matcher = new Regex(@"([^():}]+)\(([^():}]*):([^():}]*)\)"); 
MatchCollection matches = matcher.Matches(str); 

:

+0

' myMatch.Success' की जांच करने का कोई मतलब नहीं है लेकिन आप यह दिखाना चाहेंगे कि 'मूल्य कैसे प्राप्त करें ' – Rawling

1

मैं की तरह कुछ के लिए जाना चाहते हैं। (समूहों में से किसी एक (, ) या : मौजूद होता है तो पूरी बात नजरअंदाज कर दिया जाएगा यह समझ नहीं के रूप में क्या जहां होना है।)

तो आप का मिलान नहीं हुआ मान प्राप्त कर सकते हैं जैसे कि

foreach(Match m in matches) 
{ 
    Console.WriteLine("First: {0}, Second: {1}, Third{2}", 
     m.Groups[1].Value, m.Groups[2].Value, m.Groups[3].Value); 
} 

इसलिए यदि आप सिर्फ ( और : के बीच बिट्स चाहते आप सादे string तरीकों के साथ

foreach(Match m in matches) 
{ 
    Console.WriteLine(m.Groups[2].Value); 
} 
1
public static void Main(string[] args) 
     { 
      string str = @"stackoverflow(stack:stackoverflow)overstackflow(over:stackoverflow)"; 
      Console.WriteLine(ExtractString(str)); 
     } 

     static string ExtractString(string s) 
     { 
      var start = "("; 
      int startIndex = s.IndexOf(start) + start.Length; 
      int endIndex = s.IndexOf(":", startIndex); 
      return s.Substring(startIndex, endIndex - startIndex); 
     } 

परिणाम stack है लेकिन आप इसे अपनी स्ट्रिंग पर पुनरावृत्ति के लिए foreach लूप में उपयोग कर सकते हैं।

Demo

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