У меня есть текст сказать:Заменить текст приращением каждый вхождение
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();
}
В настоящее время выше код не работает, и замена текста между ними.
Помогите мне исправить это?
ответ Wiktor является лучшее решение. Причина, по которой ваша логика замены не работает, заключается в том, что на каждой итерации вашего foreach значения индекса совпадений устарели, потому что xx изменился. Если вы должны написать метод Replace, похоже, он был бы рекурсивным. –