我想在我的ASP.NET MVC 3网站上进行搜索,因此对于搜索我必须找到匹配的模式,并且在那个单词中将匹配的部分替换为粗体的相同部分(我使用的是html <strong>
标记)。
所以我在控制器中有这个
string[] words=content.Split(' ');
foreach (Thread thread in context.Threads)
{
foreach (string word in words)
{
if (thread.Title.ToLower().Contains(word.ToLower()))
{
thread.Title=Regex.Replace(thread.Title,word,String.Format("<strong>{0}</strong>","$0"),RegexOptions.IgnoreCase);
}
}
}
所以,如果我搜索new thread a
它会找到类似New thrEAd
的线程。
但是在html中它使我的字符串像那样
<strong>New</strong> <strong>thrE<strong>A</strong>d</strong>
所以我想删除a中的强标记,因为它会产生双粗体... 我怎么能这样做?
如果您有有趣的方式进行搜索,我也很乐意听取您的建议。
答案 0 :(得分:1)
您可以通过检查搜索词是否包含其他任何内容来清理搜索词:
var cleanWords = words.Where(w => !words.Any(w2 => w2.Contains(w));
答案 1 :(得分:0)
试试这个:
IEnumerable<string> enumerableWords = content.Split(' ').Distinct();
string[] words = enumerableWords.ToArray();
foreach (Thread thread in context.Threads) {
string result = thread.Title;
foreach (string word in words) {
result = Regex.Replace(result, String.Format(@"\b{0}\b", word), String.Format(@"<strong>{0}</strong>", word), RegexOptions.IgnoreCase);
}
thread.Title = result;
}