如何在C#上执行此regex

本文关键字:执行 regex | 更新日期: 2023-09-27 17:59:21

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

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

例如,如果我有一个字符串hello <div>bye bye</div> marcoId想要得到hello marco

我如何在C#上做到这一点?

如何在C#上执行此regex

我想您已经了解了人们对使用regex解析HTML的普遍看法。我建议您使用HTML解析器,如HTML敏捷包。

这是一个示例:

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"
     }
}

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

在这种情况下,regex非常简单:

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