我如何在C#上执行此正则表达式?

时间:2011-06-16 08:46:23

标签: c# regex

我有一个字符串,可以有一些html标签。我想删除其中一些(包含数据),但不是所有标签。

事实上,我想删除<img /><div>...</div>

例如,如果我有字符串hello <div>bye bye</div> marco我想获得hello marco

如何在C#上执行此操作?

2 个答案:

答案 0 :(得分:7)

我认为您了解人们对parsing HTML with regex的一般看法。我建议你使用HTML解析器,例如HTML Agility Pack

以下是一个示例:

class Program
{
    static void Main()
    {
        var doc = new HtmlDocument();
        doc.LoadHtml("hello <div>bye bye</div> marco <img src=\"http://example.com\"/> test");

        for (int i = 0; i < doc.DocumentNode.ChildNodes.Count; i++)
        {
            var child = doc.DocumentNode.ChildNodes[i];
            if (child.NodeType == HtmlNodeType.Element && new[] { "div", "img" }.Contains(child.Name, StringComparer.OrdinalIgnoreCase))
            {
                doc.DocumentNode.RemoveChild(child);
            }
        }

        var sb = new StringBuilder();
        using (var writer = new StringWriter(sb))
        {
            doc.Save(writer);
        }
        Console.WriteLine(sb); // prints "hello  marco  test"
     }

}

答案 1 :(得分:2)

将正则表达式用于XML并不是一个好主意。根据语言,您应该使用一些XML库。

在这种情况下,正则表达式非常简单:

        string s = "hello <div>bye bye</div> marco <img />";

        Regex rgx = new Regex("(<div>[^<]*</div>)|(<img */>)");
        s = rgx.Replace(s, "");