回答
你不應該使用正則表達式來解析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"";
請再讀一遍我的問題。不只是h4標籤,另一個標籤,所以我不知道標籤。我想刪除任何之間的 – user20982
爲什麼你的文件有[,改爲<... – mybirthname
請再次閱讀我的問題。不只是h4標籤,另一個標籤,所以我不知道標籤。我想刪除任何之間的 – user20982
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>
您絕對不應該使用正則表達式!也請告訴我在哪種情況下HtmlAgilityPack不會拯救你?在這種情況下保存非常容易。 – mybirthname
有些網站出錯了。例如:
請再次閱讀我的問題。不只是h4標籤,另一個標籤,所以我不知道標籤。我想刪除 – user20982
- 1. 使用Regex.Replace
- 2. Regex.Replace:如何使用$ groups後跟數字
- 3. 使用Regex.Replace與LinQ
- 4. 使用Regex.Replace()中的方法
- 5. C#Regex.Replace
- 6. asp.net regex.replace()
- 7. Regex.Replace matching
- 8. Regex.Replace串
- 9. 如何在這種情況下使用Regex.Replace?
- 10. 如何使用Regex.Replace方法獲取找到的子字符串?
- 11. 如何使用Regex.Replace從字符串中刪除數字?
- 12. 如何在Regex.Replace方法中使用$符號?
- 13. 如何使用.net Regex.Replace替換url字段?
- 14. Regex.Replace無法使用分隔符
- 15. 使用Regex.Replace保持可以改變
- 16. 使用regex.replace查找並替換「$$」
- 17. 使用Regex.Replace()將cm轉換爲mm
- 18. 我如何做一個RegEx.replace到VB
- 19. Regex.Replace中的MatchEvaluator如何工作?
- 20. 如何在Regex.Replace()中獲得匹配?
- 21. Regex.Replace方法
- 22. Regex.Replace not replace
- 23. regex.replace c#diacritics
- 24. VB.NET - Regex.Replace error [character
- 25. c#regex.replace vs regex.matches
- 26. LINQ和REGEX.REPLACE
- 27. regex.replace問題
- 28. Regex.Replace並匹配
- 29. 將多個Regex.Replace調用
- 30. Regex.Replace和String.Replace不起作用
[?什麼是C#來解析HTML的最佳方式(http://stackoverflow.com/questions/56107/what-is-best-way-to-parse-html-in-c) –
切勿使用正則表達式來解析html。有html解析器! – mybirthname
[請勿](http://stackoverflow.com/a/1732454/11683)。使用解析器。 – GSerg