Я только начинаю использовать Regex, так что терпите мою терминологию. У меня есть шаблон регулярных выражений, который работает правильно на строке. Строка может быть в формате «текст [шаблон] текст». Поэтому у меня также есть шаблон регулярных выражений, который отрицает первый шаблон. Если я распечатываю результаты каждого матча, все отображается правильно.
Проблема в том, что я хочу добавить текст в строку, и это изменяет индекс совпадений в регулярном выражении MatchCollection. Например, если я хочу заключить найденное совпадение в теги "td" match "/ td" ", у меня есть следующий код:
Regex r = new Regex(negRegexPattern, RegexOptions.IgnoreCase | RegexOptions.Singleline);
MatchCollection mc = r.Matches(text);
if (mc.Count > 0)
{
for (int i = 0; i < mc.Count; i++)
{
text = text.Remove(mc[i].Index, mc[i].Length);
text = text.Insert(mc[i].Index, "<td>" + mc[i].Value + "</td>");
}
}
Это прекрасно работает для первого матча. Но, как и следовало ожидать, mc [i] .Index больше не действителен, потому что строка изменилась. Поэтому я попытался найти только одно совпадение в цикле for для ожидаемого количества совпадений (mc.Count), но затем продолжаю находить первое совпадение.
Так что, надеюсь, не вводя больше регулярных выражений, чтобы убедиться, что это не первое совпадение, и сохраняя все в одной строке, есть ли у кого-нибудь мнение о том, как я могу это сделать? Спасибо за ваш вклад.
Редактировать: Спасибо всем за ваши ответы, я ценю их всех.