如何使用 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>
你永远不应该使用正则表达式来解析 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>