从C#中的字符串中删除HTML标签和评论?

问题描述:

如何从C#中的字符串中删除从'<''并以'>'结尾的所有内容。我知道这可以用正则表达式完成,但我不是很好。从C#中的字符串中删除HTML标签和评论?

+1

使用HTML解析器像HTML敏捷性包。正则表达式通常是html的糟糕选择。 – 2010-04-09 19:25:46

+0

在这种情况下,你可以,因为它是正则表达式的简单用例。它不同于为不同标签解析整个DOM – AuthorProxy 2016-04-11 10:40:09

我很快写了一个最近的小项目的标签模式就是这个。

string tagPattern = @"<[!--\W*?]*?[/]*?\w+.*?>"; 

我用它像这样

MatchCollection matches = Regex.Matches(input, tagPattern); 
foreach (Match match in matches) 
{ 
    input = input.Replace(match.Value, string.Empty); 
} 

它可能会需要进行修改,以正确处理脚本或风格的标记。

+0

像魅力一样工作 – 2010-04-10 20:24:35

+1

'[! - \ W *?]'表示“匹配'!'和'-'范围内的一个字符,一个非单词字符,'*'或者'?'“。由于该组是可选的,所以它并没有受到伤害,但它并不能达到负面预测(这将是'(!! - )','\ W *?'和后面的' *?'根本没有任何意义)。 – 2010-05-18 13:58:40

非正则表达式选项:但它仍然不会解析嵌套标记!

public static string StripHTML(string line) 
     { 
      int finished = 0; 
      int beginStrip; 
      int endStrip; 

      finished = line.IndexOf('<'); 
      while (finished != -1) 
      { 
       beginStrip = line.IndexOf('<'); 
       endStrip = line.IndexOf('>', beginStrip + 1); 
       line = line.Remove(beginStrip, (endStrip + 1) - beginStrip); 
       finished = line.IndexOf('<'); 
      } 

      return line; 
     } 

另一个非正则表达式的代码,工作比8倍速度的正则表达式:

public static string StripTagsCharArray(string source) 
{ 
    char[] array = new char[source.Length]; 
    int arrayIndex = 0; 
    bool inside = false; 
    for (int i = 0; i < source.Length; i++) 
    { 
     char let = source[i]; 
     if (let == '<') 
     { 
      inside = true; 
      continue; 
     } 
     if (let == '>') 
     { 
      inside = false; 
      continue; 
     } 
     if (!inside) 
     { 
      array[arrayIndex] = let; 
      arrayIndex++; 
     } 
    } 
    return new string(array, 0, arrayIndex); 
}