从C#中的字符串中删除HTML标记和注释?
如何从C#中的字符串中删除以“开头的所有内容。我知道可以用regex来完成,但我不太擅长。我最近为一个小项目快速编写的标记模式就是这个从C#中的字符串中删除HTML标记和注释?,c#,html,regex,C#,Html,Regex,如何从C#中的字符串中删除以“开头的所有内容。我知道可以用regex来完成,但我不太擅长。我最近为一个小项目快速编写的标记模式就是这个 string tagPattern = @"<[!--\W*?]*?[/]*?\w+.*?>"; 它可能需要修改以正确处理脚本或样式标记。非正则表达式选项:但它仍然不会解析嵌套标记 public static string StripHTML(string line) { int finished = 0;
string tagPattern = @"<[!--\W*?]*?[/]*?\w+.*?>";
它可能需要修改以正确处理脚本或样式标记。非正则表达式选项:但它仍然不会解析嵌套标记
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;
}
公共静态字符串StripHTML(字符串行)
{
int=0;
int beginStrip;
内端条;
finished=line.IndexOf('另一个比正则表达式快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);
}
公共静态字符串stripTagScharray(字符串源)
{
char[]数组=新字符[source.Length];
int-arrayIndex=0;
bool-inside=false;
for(int i=0;i
使用html Agility Pack之类的html解析器。对于html来说,正则表达式通常是一个糟糕的选择。在这种情况下,您可以,因为它是正则表达式的简单用例。它与为不同的标记解析整个DOM不同[!--\W*?]
意味着“匹配介于!
和-
之间的字符、非单词字符、*
或?
”。由于该组是可选的,因此不会造成伤害,但它不能实现明显的预期目的,即“消极前瞻”(即(?!-),\W*?
和下面的*?
没有任何意义)。
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);
}