从C#中的字符串中删除HTML标签和评论?
答
我很快写了一个最近的小项目的标签模式就是这个。
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);
}
使用HTML解析器像HTML敏捷性包。正则表达式通常是html的糟糕选择。 – 2010-04-09 19:25:46
在这种情况下,你可以,因为它是正则表达式的简单用例。它不同于为不同标签解析整个DOM – AuthorProxy 2016-04-11 10:40:09