ich einen Text haben sagen:Ersetzen Sie einen Text, indem jedes Auftreten Inkrementieren
Hello
abc
Hello
def
Hello
ich es
Hello1
abc
Hello2
abc
Hello3
dh umwandeln möchte ich brauche eine Nummer nach jedem Auftreten von „Hallo“ anhängen Text.
Zur Zeit habe ich geschrieben diesen Code:
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++));
}
und die Methode Ersetzen oben verwendet wird, ist:
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();
}
Zur Zeit der obige Code funktioniert nicht und wird den Text dazwischen zu ersetzen.
Können Sie mir helfen, das zu beheben?
Wiktor Antwort ist die beste Lösung. Der Grund dafür, dass Ihre Ersetzungslogik nicht funktioniert, besteht darin, dass die Indexwerte der Übereinstimmungen bei jeder Iteration der Übereinstimmungen veraltet sind, weil sich xx geändert hat. Wenn Sie eine Replace-Methode schreiben müssen, scheint sie rekursiv zu sein. –