我有一个文字说:
Hello
abc
Hello
def
Hello
我想将其转换为
Hello1
abc
Hello2
abc
Hello3
即每次出现“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++));
}
以及上面使用的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();
}
目前上述代码无效,正在替换两者之间的文本。
你可以帮我解决这个问题吗?
答案 0 :(得分: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);
请参阅C# demo