2012-06-15 23 views
6

Ho lavorato duramente con un problema e qualsiasi aiuto sarebbe apprezzato.C# Regex - Corrispondenza e sostituzione, Incremento automatico

Problema: ho un paragrafo e voglio sostituire una variabile che appare più volte (Variabile = @Variabile). Questa è la parte facile, ma la parte che sto avendo difficoltà sta cercando di sostituire la variabile con valori diversi.

Ho bisogno che ogni occorrenza abbia un valore diverso. Ad esempio, ho una funzione che esegue un calcolo per ogni variabile. Quello che ho finora è qui sotto:

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++ 
     } 
    } 

sono in grado di sostituire ogni variabile che ho bisogno di con il numero restituito da getReplacementNumber funzione (i), ma come ho messo nuovamente dentro il mio ingresso originale con il valori sostituiti, nello stesso ordine trovato nella collezione della partita?

Grazie in anticipo!

Marcus

+0

Qual è il tipo di ritorno di 'getReplacementNumber (i)'? –

risposta

8

Uso il sovraccarico di Replace che accetta un MatchEvaluator come secondo parametro.

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

Sto assumendo qui che getReplacementNumber(int i) restituisce un string. In caso contrario, sarà necessario convertire il risultato in una stringa.

vederlo lavorare on-line: ideone

+0

Ha funzionato come un fascino! Grazie per l'aiuto. Lo apprezzo molto! –