Regex Replace Case Проблема отсутствия чувствительности - PullRequest
1 голос
/ 14 декабря 2009

Я выполняю поиск по сайту и пытаюсь выделить слова, которые пользователь искал, используя следующий код:

data = Regex.Replace(data, Model.SearchCriteria, "<strong>" + Model.SearchCriteria + "</strong>", RegexOptions.IgnoreCase);

Однако, если данные «Я направился на север в сторону Канады» и пользователь выполнил поиск «на север», результаты покажут «Я направился на север в сторону Канады» с выделенным севером, однако фактические данные были слегка некорректно заменены.

Как я могу сохранить возвращенные данные в такте, выделяя то, что искал пользователь?

Ответы [ 3 ]

5 голосов
/ 14 декабря 2009

В этом случае вам нужно использовать шаблон подстановки, чтобы поместить исходный текст в заменяемую строку в сравнении с критериями явного поиска

data = Regex.Replace(
  "("+Model.SearchCriteria+")",
  "<strong>$1</strong>",
  RegexOptions.IgnoreCase);

Помещение скобок вокруг критериев поиска помещает его в неназванную группу. Затем вы можете ссылаться на эту группу по индексу в строке замены, используя $1. Затем будет использован исходный сопоставленный текст.

Информация о строках подстановки в Regex. Замена

0 голосов
/ 14 декабря 2009

Попробуйте это:

Regex.Replace("I went North towards Canada", "(" + "north + ")", (Match match) =>
{
    return "<strong>" + match.Value + "</strong>";
}, RegexOptions.IgnoreCase);
0 голосов
/ 14 декабря 2009

Вы заменяете «Север» в документе поисковой строкой «север». Попробуйте заменить его на совпавшую фразу вместо поисковой фразы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...