пристройка к выше ответа. (не имеют достаточной репутации, чтобы комментировать)
Чтобы избежать перерыва от замены, когда критерии поиска были [span pan a a], найденное слово было заменено на что-то другое, кроме замены назад ... не очень эффективно, хотя ...
public string Highlight(string input)
{
if (input == string.Empty || searchQuery == string.Empty)
{
return input;
}
string[] sKeywords = searchQuery.Replace("~",String.Empty).Replace(" "," ").Trim().Split(' ');
int totalCount = sKeywords.Length + 1;
string[] sHighlights = new string[totalCount];
int count = 0;
input = Regex.Replace(input, Regex.Escape(searchQuery.Trim()), string.Format("~{0}~", count), RegexOptions.IgnoreCase);
sHighlights[count] = string.Format("<span class=\"highlight\">{0}</span>", searchQuery);
foreach (string sKeyword in sKeywords.OrderByDescending(s => s.Length))
{
count++;
input = Regex.Replace(input, Regex.Escape(sKeyword), string.Format("~{0}~", count), RegexOptions.IgnoreCase);
sHighlights[count] = string.Format("<span class=\"highlight\">{0}</span>", sKeyword);
}
for (int i = totalCount - 1; i >= 0; i--)
{
input = Regex.Replace(input, "\\~" + i + "\\~", sHighlights[i], RegexOptions.IgnoreCase);
}
return input;
}
Во-первых, это будет означать частичные совпадения в словах. В вашем регулярном выражении должны выполняться только словарные замены. Во-вторых, вы можете ввести '' ''вместо' Convert.ToChar ("") ' – Richard
Спасибо Ричарду - хороший совет для char, я знал, что должен быть лучший способ, но он не нажал. RE частичные совпадения, вот что мне нужно в этот случай, поскольку поиск использует подстановочные знаки (отсюда необходимость сделать вещи более ясными с подсветкой). – TimS
спасибо! это сработало для меня. –