2016-11-24 12 views
5

मैं एक पाठ है incrementing द्वारा एक पाठ बदलें कहते हैं:प्रत्येक क्रिया

Hello 
abc 
Hello 
def 
Hello 

मैं इसे करने के लिए

Hello1 
abc 
Hello2 
abc 
Hello3 

यानी मैं से प्रत्येक घटना के बाद एक नंबर संलग्न करने के लिए की जरूरत है परिवर्तित करना चाहते हैं "हैलो" पाठ।

वर्तमान में मैं इस कोड लिखा है:

var xx = File.ReadAllText("D:\\test.txt"); 


var regex = new Regex("Hello", RegexOptions.IgnoreCase); 
var matches = regex.Matches(xx); 


int i = 1; 
foreach (var match in matches.Cast<Match>()) 
{ 
    string yy = match.Value; 
    xx = Replace(xx, match.Index, match.Length, match.Value + (i++)); 
} 

और इस्तेमाल उपरोक्त विधि की जगह है:

public static string Replace(string s, int index, int length, string replacement) 
{ 
    var builder = new StringBuilder(); 
    builder.Append(s.Substring(0, index)); 
    builder.Append(replacement); 
    builder.Append(s.Substring(index + length)); 
    return builder.ToString(); 
} 

वर्तमान में इसके बाद के संस्करण कोड काम नहीं कर रहा और बीच में पाठ की जगह है।

क्या आप इसे ठीक करने में मेरी सहायता कर सकते हैं?

+0

विक्टर का जवाब है सबसे अच्छा समाधान। आपका प्रतिस्थापन तर्क काम नहीं कर रहा है, हालांकि यह है कि आपके foreach के प्रत्येक पुनरावृत्ति पर मैचों के सूचकांक मान पुराने हो गए हैं क्योंकि xx बदल गया है। यदि आपको एक प्रतिस्थापन विधि लिखनी है तो ऐसा लगता है कि यह रिकर्सिव होगा। –

उत्तर

9

Hello मान लिया जाये कि सिर्फ एक अधिक जटिल पैटर्न के लिए प्लेसहोल्डर है, यहाँ उन्हें आसानी से ठीक है: Regex.Replace अंदर एक मैच मूल्यांकनकर्ता का उपयोग जहां चर का उपयोग कर सकते हैं:

var s = "Hello\nabc\nHello\ndef\nHello"; 
var i = 0; 
var result = Regex.Replace(
    s, "Hello", m => string.Format("{0}{1}",m.Value,++i), RegexOptions.IgnoreCase); 
Console.WriteLine(result); 

देखें C# demo

+0

मेरे पास एक प्रश्न है, क्या कोई विशिष्ट कारण 'string.Format() 'तुरंत उपयोग नहीं करता है? – Sid

+0

"तत्काल" से आपका क्या मतलब है? –

+0

मेरा बुरा मैंने सोचा कि उसे केवल 3 की जरूरत है, वह मूर्खतापूर्ण था क्योंकि उसे उस मामले में 'स्ट्रिंग' फोर्मेट 'की भी आवश्यकता नहीं है। – Sid

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