2014-12-25 19 views
-6

我想regex.replace輸出,除去在C#中的所有標籤:如何使用regex.replace

輸入:

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

輸出:

<h4 class=\"nikstyle_title\"> </h4> 
+1

[?什麼是C#來解析HTML的最佳方式(http://stackoverflow.com/questions/56107/what-is-best-way-to-parse-html-in-c) –

+1

切勿使用正則表達式來解析html。有html解析器! – mybirthname

+1

[請勿](http://stackoverflow.com/a/1732454/11683)。使用解析器。 – GSerg

回答

1

你不應該使用正則表達式來解析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; 
     } 

編輯:

對於你的第二個願望 - >刪除每<a></a>標籤與`href =「http://www.sample.com」:

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

+0

請再讀一遍我的問題。不只是h4標籤,另一個標籤,所以我不知道標籤。我想刪除任何之間的 user20982

+0

爲什麼你的文件有[,改爲<... – mybirthname

+0

請再次閱讀我的問題。不只是h4標籤,另一個標籤,所以我不知道標籤。我想刪除任何之間的 user20982

0

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> 
+0

您絕對不應該使用正則表達式!也請告訴我在哪種情況下HtmlAgilityPack不會拯救你?在這種情況下保存非常容易。 – mybirthname

+0

有些網站出錯了。例如: bla bla bla一些文字沒有標籤,但我需要 .... – Vladislav

+0

請再次閱讀我的問題。不只是h4標籤,另一個標籤,所以我不知道標籤。我想刪除 user20982