如何使用 regex.rereplace 删除 C# 中的所有 标记

本文关键字:标记 regex 何使用 rereplace 删除 | 更新日期: 2023-09-27 18:35:21

我希望输出带有正则表达式.replace :

输入:

<h4 class='"nikstyle_title'"><a rel='"nofollow'" target='"_blank'" href="http://www.sample.com">my text</a></h4>

输出:

<h4 class='"nikstyle_title'"> </h4>

如何使用 regex.rereplace 删除 C# 中的所有 <a 到 /a> 标记

你永远不应该使用正则表达式来解析 html,你需要 html 解析器。下面是如何做到这一点的示例。

您需要在项目中添加此引用:

Install-Package HtmlAgilityPack

代码:

 static void Main(string[] args)
        {
            string html = @"<!DOCTYPE html>
<html>
<body>
<h1>My First Heading</h1>
<p>My first paragraph.</p>
<table>
    <tr>
        <td>A!!</td>
        <td>te2</td>
        <td>2!!</td>
        <td>te43</td>
        <td></td>
        <td> !!</td>
        <td>.!!</td>
        <td>te53</td>
        <td>te2</td>
        <td>texx</td>
    </tr>
</table>
<h4 class=""nikstyle_title""><a rel=""nofollow"" target=""_blank"" href=""http://www.niksalehi.com/ccount/click.php?ref=ZDNkM0xuQmxjbk5wWVc1MkxtTnZiUT09&id=117""><span class=""text-matn-title-bold-black"">my text</span></a></h4>
</body>
</html>";
            HtmlDocument doc = new HtmlDocument();
            doc.LoadHtml(html);
            List<HtmlNode> tdNodes = doc.DocumentNode.Descendants().Where(x => x.Name == "h4" && x.Attributes.Contains("class") && x.Attributes["class"].Value.Contains("nikstyle_title")).ToList();

            foreach (HtmlNode node in tdNodes)
            {
                node.InnerHtml = "";
            }
            string html2 = doc.DocumentNode.InnerHtml;
        }

编辑:

对于您的第二个愿望 -> 删除每个带有"href="http://www.sample.com"的<a></a>标签:

    static void Main(string[] args)
        {
            string html = @"<!DOCTYPE html>
<html>
<body>
<h1>My First Heading</h1>
<p>My first paragraph.</p>
<table>
    <tr>
        <td>A!!</td>
        <td>te2</td>
        <td>2!!</td>
        <td>te43</td>
        <td></td>
        <td> !!</td>
        <td>.!!</td>
        <td>te53</td>
        <td>te2</td>
        <td>texx</td>
    </tr>
</table>
<h4 class=""nikstyle_title""><a rel=""nofollow"" target=""_blank"" href=""http://www.sample.com""><span class=""text-matn-title-bold-black"">my text</span></a></h4>
<div><a rel=""nofollow"" target=""_blank"" href=""http://www.sample.com""><span class=""text-matn-title-bold-black"">my text</span></a></div>
</body>
</html>";
            HtmlDocument doc = new HtmlDocument();
            doc.LoadHtml(html);
            List<HtmlNode> tdNodes = doc.DocumentNode.Descendants().Where(x => x.Name == "a" && x.Attributes.Contains("href") && x.Attributes["href"].Value.Contains("http://www.sample.com")).ToList();
            foreach (HtmlNode node in tdNodes)
            {
                node.Remove();
            }
            string html2 = doc.DocumentNode.InnerHtml;
        }

就我个人而言,我更喜欢使用 @ 进行转义,因为它更具可读性,您可以像我的例子一样尝试。当你使用@时,你会用双引号转义 - 例如:class=""a"";

HtmlAgilityPack 不是那么通用。有时只有正则表达式可以节省您的时间。在 C# 中,可以使用以下代码:

string htmlString = "";
        var regex = new Regex("<h4 class='''"nikstyle_title'''">(?<delete>.*?)<''/h4>");
        string replace = regex.Match(htmlString).Groups["delete"].Value;
        htmlString = htmlString.Replace(replace, string.Empty);

您的正则表达式是:

<h4 class='"nikstyle_title'">(?<delete>.*?)<'/h4>