HTML属性剥离器

时间:2013-09-05 14:56:49

标签: c# html regex strip

我想使用C#和RegEx去除HTML字符串中的所有属性(及其值)。

例如:

<p>This is a text</p><span class="cls" style="background-color: yellow">This is another text</span>

会变成

<p>This is a text</p><span>This is another text</span>

此外,我需要删除所有属性,无论它们的值是否被引号括起来。

<p class="cls">Some content</p>
<p class='cls'>Some content</p>
<p class=cls>Some content</p>

应该全部导致

<p>Some content</p>

出于安全原因,我无法使用HTMLAgilityPack,因此我需要使用RegEx来执行此操作。

1 个答案:

答案 0 :(得分:0)

我有一个没有正则表达式的解决方案。我们使用SubString()IndexOf()混合使用。我不检查任何错误。这只是一个想法。

Working Demo

C#:

private static void Main(string[] args)
{
    string s = @"<p>This is a text</p><span class=""cls"" style=""background-color: yellow"">This is another text</span>";

    var list = s.Split(new[] {"<"}, StringSplitOptions.RemoveEmptyEntries);
    foreach (var item in list)
        Console.Write(ClearAttributes('<' + item));
    Console.ReadLine();
}

private static string ClearAttributes(string source)
{
    int startindex = source.IndexOf('<');
    int endindex = source.IndexOf('>');
    string tag = source.Substring((startindex + 1), (endindex - startindex - 1));
    int spaceindex = tag.IndexOf(' ');
    if (spaceindex > 0)
        tag = tag.Substring(0, spaceindex);
    return String.Concat('<', tag, source.Substring(endindex));
}

输出:

<p>This is a text</p><span>This is another text</span>