2012-06-15 15 views
6

Ich habe mit einem Problem gearbeitet und jede Hilfe würde geschätzt werden.C# Regex - Übereinstimmung und ersetzen, Auto Inkrement

Problem: Ich habe einen Absatz und ich möchte eine Variable ersetzen, die mehrmals erscheint (Variable = @Variable). Dies ist der einfache Teil, aber der Teil, bei dem ich Schwierigkeiten habe, versucht, die Variable durch andere Werte zu ersetzen.

Ich brauche für jedes Vorkommen einen anderen Wert. Zum Beispiel habe ich eine Funktion, die eine Berechnung für jede Variable durchführt. Was ich bisher habe, ist unter:

private string SetVariables(string input, string pattern){ 

    Regex rx = new Regex(pattern); 
    MatchCollection matches = rx.Matches(input); 
    int i = 1; 
    if(matches.Count > 0) 
    { 
     foreach(Match match in matches) 
     { 
      rx.Replace(match.ToString(), getReplacementNumber(i)); 
      i++ 
     } 
    } 

ich in der Lage bin jede Variable zu ersetzen, die ich brauche, um mit der Anzahl von getReplacementNumber (i) Funktion zurückgegeben, aber wie ich steckte es wieder in meinen ursprünglichen Eingang mit der Ersetzte Werte in der gleichen Reihenfolge wie in der Matchsammlung?

Vielen Dank im Voraus!

Marcus

+0

Was ist der Rückgabetyp von 'getReplacementNumber (i)'? –

Antwort

8

Verwenden der Überlastung der Replace die einen MatchEvaluator als zweiten Parameter nimmt.

string result = rx.Replace(input, match => { return getReplacementNumber(i++); }); 

Ich gehe davon aus, dass hier getReplacementNumber(int i) eine string zurückgibt. Wenn nicht, müssen Sie das Ergebnis in eine Zeichenfolge konvertieren.

es die Online-Arbeit: ideone

+0

Arbeitete wie ein Charme! Danke für Ihre Hilfe. Ich schätze es sehr! –