2012-03-08 13 views
5

प्लेसहोल्डर $ 2 एक पूर्णांक के साथ से भर जाता है मान लिया जाये कि, यह संभव 1 ?:क्या रेगेक्स में अतिरिक्त प्रदर्शन करना संभव है?

var strReplace = @"$2"; 
Regex.Replace(strInput, @"((.)*?)", strReplace); 
+0

आप जावास्क्रिप्ट का उपयोग कर रहे हैं तो नीचे दिए गए http://stackoverflow.com/questions/423107/use-regexp-to-match-a-parenthetical-number-then-increment-it – PraveenVenu

उत्तर

4

आप एक MatchEvaluator साथ Regex.Replace की एक कॉलबैक संस्करण का उपयोग कर सकते हैं, पर उदाहरण देखें:

using System; 
using System.Text.RegularExpressions; 

class Program 
{ 
    static string AddOne(string s) 
    { 
     return Regex.Replace(s, @"\d+", (match) => 
     { 
      long num = 0; 
      long.TryParse(match.ToString(), out num); 
      return (num + 1).ToString(); 
     }); 
    } 

    static void Main() 
    { 
     Console.WriteLine(AddOne("hello 123!")); 
     Console.WriteLine(AddOne("bai bai 11")); 
    } 
} 
:

यहाँ एक उदाहरण (ideone) है

आउटपुट:

hello 124! 
bai bai 12 
2

मानक में (सीएस सैद्धांतिक) नियमित अभिव्यक्ति से यह बढ़ाने के लिए है, यह एक नियमित अभिव्यक्ति के साथ असंभव है।

हालांकि, पर्ल और ऐसे में नियमित अभिव्यक्तियों के विस्तार हैं, जिनके व्यवहार के लिए प्रभाव पड़ता है, और मैं निश्चित रूप से यह कहने के लिए पर्याप्त परिचित नहीं हूं कि विस्तारित regexes यह नहीं करेंगे, लेकिन मुझे पूरा यकीन है कि यह रेगेक्स के साथ व्यवहार संभव नहीं है।

+2

कोशिश पर्ल: 's/\ d +/$ और + 1/eg' – Qtax

0

यह एक मानक नियमित अभिव्यक्ति के साथ संभव नहीं है, लेकिन आप यदि आप कोई कस्टम MatchEvaluator लिख सकते हैं।

string str = "Today I have answered 0 questions on StackOverlow."; 
string pattern = @"\w*?(\d)"; 
var result = Regex.Replace(str, pattern, 
        m => (int.Parse(m.Groups[0].Value)+1).ToString()); 
Console.WriteLine(result); 

आज मैं StackOverlow पर 1 सवाल का जवाब दे दिया।

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