2009-04-21 16 views

Antwort

5

A MatchEvaluator kann dies tun:

string input = "FindbcFinddefFind", pattern = "Find"; 
int i = 1; 
string replaced = Regex.Replace(input, pattern, match => "REPLACE" + i++); 

Beachten Sie, dass die match Variable auch Zugriff auf die Match hat etc. Mit C# 2.0 Sie benötigen, um eine verwenden, anonyme Methode statt eines Lambda (aber gleicher Effekt) - um sowohl diese als auch die Match zu zeigen:

string input = "FindbcFinddefFind", pattern = "Find"; 
int i = 1; 
string replaced = Regex.Replace(input, pattern, delegate(Match match) 
{ 
    string s = match.Value.ToUpper() + i; 
    i++; 
    return s; 
}); 
3

Sie könnten die Überladung verwenden, die eine MatchEvaluator nimmt und die benutzerdefinierte Ersetzungszeichenfolge innerhalb der Delegat-Implementierung bereitstellen, die es Ihnen ermöglichen würde, alle Ersetzungen in einem Durchgang auszuführen.

Zum Beispiel:

var str = "aabbccddeeffcccgghhcccciijjcccckkcc"; 
var regex = new Regex("cc"); 
var pos = 0; 
var result = regex.Replace(str, m => { pos++; return "Replace" + pos; }); 
Verwandte Themen