如何从C#中的字符串中删除双html <strong>标记</strong>

时间:2011-11-08 09:32:37

标签: c# html regex asp.net-mvc-3 search

我想在我的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中的强标记,因为它会产生双粗体... 我怎么能这样做?

如果您有有趣的方式进行搜索,我也很乐意听取您的建议。

2 个答案:

答案 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;
}