通过递增每个出现来替换文本

Rag*_*hav 5 .net c# regex substring

我有一个文字说:

Hello
abc
Hello
def
Hello
Run Code Online (Sandbox Code Playgroud)

我想把它转换成

Hello1
abc
Hello2
abc
Hello3
Run Code Online (Sandbox Code Playgroud)

即我需要在每次出现"Hello"文本后附加一个数字.

目前我已经写了这段代码:

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++));
}
Run Code Online (Sandbox Code Playgroud)

以上使用的Replace方法是:

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();
}
Run Code Online (Sandbox Code Playgroud)

目前上面的代码不起作用,正在替换它们之间的文本.

你能帮我解决这个问题吗?

Wik*_*żew 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);
Run Code Online (Sandbox Code Playgroud)

请参阅C#演示