整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          「C#實戰」一行代碼搞定!高效移除HTML標簽還原純凈文本

          HTML文本中移除所有HTML標記并提取純文本是我們經常需要使用的文本內容處理方式,比如搜索引擎、網站爬蟲或者本地文檔檢索系統需要提取網頁或HTML文檔的實際內容進行索引。通過去除HTML標簽,可以專注于實際的文字信息,提高搜索結果的相關性和準確性。在新聞聚合應用或社交媒體平臺上展示網頁鏈接的摘要時,通常會提取并顯示純文本內容以提供簡潔的預覽。對于視覺障礙人士使用的輔助技術如屏幕閱讀器,它們無法解析復雜的HTML結構,因此需要提取純文本以便朗讀給用戶。所以今天給大家分享一個使用正則表達式移除所有的Html標記的方法,供有需要的朋友們參考:

          第一個核心代碼是:正則表達式"<.*?>"

          // 示例用法:

          string inputHtml = "<html><body><h1>Hello, World!</h1>This is a <b>test</b>.</body></html>";

          string plainText = RemoveHtmlTags(inputHtml);

          Console.WriteLine(plainText); // 輸出: "Hello, World!This is a test."

          public static string RemoveHtmlTags(string html)

          {

          // 正則表達式用于匹配HTML標簽

          Regex regex = new Regex("<.*?>", RegexOptions.Singleline | RegexOptions.Compiled);

          // 使用正則表達式的Replace方法移除所有匹配的HTML標簽

          string result = regex.Replace(html, String.Empty);

          return result;

          }

          這個正則表達式<.*?>是非貪婪匹配任何以 < 開始、以 > 結束的字符串,它會盡可能少地匹配字符以找到每個HTML標簽。

          請注意,雖然此方法對于簡單場景可能有效,但對復雜的HTML文檔(特別是含有嵌套標簽、注釋、CDATA等內容)可能不夠健壯,因為它無法處理所有可能的HTML結構。

          第二個核心代碼是:正則表達式"<[^>]*>"

          public static string ExtractPlainTextFromHtml(string html)

          {

          // 使用正則表達式匹配所有的HTML標簽

          // 注意:這個簡單的正則表達式適用于大多數基礎HTML結構,但可能無法處理復雜嵌套或特殊格式的HTML

          Regex regex = new Regex("<[^>]*>", RegexOptions.Singleline | RegexOptions.Compiled);

          // 使用Replace方法去除所有匹配到的HTML標簽,并返回純文本內容

          string plainText = regex.Replace(html, String.Empty);

          return plainText.Trim(); // 為了得到更整潔的結果,可以對結果進行trim操作以去除多余的空白字符

          }

          在這段代碼中,我們定義了一個名為ExtractPlainTextFromHtml的方法,該方法利用正則表達式 <[^>]*> 來查找并替換所有HTML標簽。這里的正則表達式表示任何以 < 開始、以 > 結束的非空字符串(即HTML標簽),Singleline 選項使.能匹配換行符,以便跨多行搜索標簽,而 Compiled 選項則是為了優化正則表達式的性能。

          第二個核心代碼是:正則表達式"<[^>]*>"

          public static string RemoveHtmlTags(string html)

          {

          // 正則表達式,匹配所有HTML標簽

          string pattern = "<[^>]+>";

          // 使用Regex.Replace方法移除所有匹配的HTML標簽

          return Regex.Replace(html, pattern, String.Empty);

          }

          請注意,此方法僅移除HTML標記,不會解析或處理嵌入在HTML中的JavaScript代碼或其他非標記內容。此外,此方法也無法處理不規范或不符合預期格式的HTML標記。如果需要更復雜的HTML解析或清理,您可能需要使用專門的HTML解析庫,如AngleSharp或HtmlAgilityPack等。

          盡管上述方法對于許多簡單場景已經足夠有效,但在面對復雜的HTML文檔時,由于HTML本身的嵌套和特殊結構,簡單的正則表達式可能無法完美地解析并移除所有標簽。在這種情況下,推薦使用專門為處理HTML設計的庫,如HtmlAgilityPack,它可以準確地解析HTML并提供豐富的API用于提取純文本內容。


          在國內的新聞網站上,亂七八糟的廣告和其他不相干內容太多。

          怎么能批量提取出新聞標題和正文呢?

          GeneralNewsExtractor(GNE)是一個通用新聞網站正文抽取模塊,輸入一篇新聞網頁的 HTML, 輸出正文內容、標題、作者、發布時間、正文中的圖片地址和正文所在的標簽源代碼。GNE在提取、網易新聞、游民星空、 觀察者網、鳳凰網、騰訊新聞、ReadHub、新浪新聞等數百個中文新聞網站上效果非常出色,幾乎能夠達到100%的準確率。借助GEN這個Python庫,就可以很輕松的實現提取新聞內容的任務。

          在ChatGPT中輸入如下提示詞:

          寫一段Python代碼,實現提取新聞網站上文本的任務。具體步驟如下:

          用戶輸入一個新聞頁面的URL,獲取URL;

          用gne庫(GeneralNewsExtractor)來提取標題和主體內容;

          提取內容保存到d盤的excel文件中,excel文件標題為News,新聞標題標題放在第1列,新聞內容放在第2列;

          程序運行后,顯示錯誤信息:

          403 Forbidden

          You don't have permission to access the URL on this server.

          denied by UA ACL = blacklist

          Powered by Tengine CDN Request Id: a3b5179f16863107904525739e

          求助于ChatGPT,回復如下:

          看起來你遇到了403禁止訪問的錯誤。這可能是因為目標網站的服務器拒絕了你的請求。這通常是因為服務器檢測到了Python請求的User-Agent,認為這是一個爬蟲或自動化工具。

          你可以嘗試在請求中偽裝成一個常見的瀏覽器User-Agent,這樣服務器可能就不會阻止你的請求了。以下是修改后的代碼:

          輸入一篇網易新聞: https://www.163.com/news/article/I6QD90N400019K82.html

          程序運行后,結果如下:

          文本提取的準確度比較高,可以滿足要求。

          們今天來分析解釋一下這個表達式string hrefPattern = @"href\s*=\s*(?:""'[""']|(?<1>[^>\s]+))";,并用實例演示用法。這個正則表達式用于從文本中提取href屬性的值,這些值可以是被單引號或雙引號包圍的,或者是不包含大于符號和空白字符的文本。我們分解這個正則表達式來詳細解釋它的各個部分:

          1. href\s*=\s*: 這部分匹配 href 關鍵字,后面可以跟著零個或多個空白字符,然后是一個等號,再然后又是零個或多個空白字符。其中href: 直接匹配文本中的"href",這是HTML中表示鏈接地址的屬性名稱。\s*=\s*: 匹配等號(=),等號前后可以有0個或多個空白字符(包括空格、制表符、換行符等)。

          2. (?:...): 這是一個非捕獲組,意味著它會匹配括號內的內容,但不會為其創建一個捕獲組。這意味著我們不能直接從匹配結果中提取這部分內容。

          3. [""'](?<1>[^""']*)[""']: 這部分匹配被單引號或雙引號包圍的任何內容。具體來說:

          1. [""']: 匹配一個單引號或雙引號。

          2. (?<1>[^\"']*): 創建了一個命名捕獲組,名為1,用來捕獲在引號之間的任何非引號字符序列,這就是href屬性的值。(?<1>...): 這是一個命名捕獲組,但這里它被放在了一個非捕獲組內,這意味著它不會捕獲匹配的內容。

          3. [^""']*: 匹配任何不是單引號或雙引號的字符零次或多次。

          4. [""']: 再次匹配一個單引號或雙引號。

          4. |: 或者操作符,表示前面的模式和后面的模式中的任何一個可以匹配。又叫管道符號,代表邏輯“或”操作,也就是表示前面的模式與后面的模式任一滿足即可。

          5. (?<1>[^>\s]+): 這部分匹配任何不是大于符號或空白字符的字符一次或多次。這也是一個命名捕獲組,但同樣,它被放在了一個非捕獲組內。當href值沒有被引號包圍時使用。也就是這部分匹配不是大于符號(>)和空白字符的任何字符1次或多次,但不包括引號。

          綜上所述,此正則表達式能夠處理以下兩種格式的href屬性及其值:

          1. 被引號包圍的情況:<a href="http://example.com">...</a> 或 <a href='http://example.com'>...</a>

          2. 未被引號包圍的情況:<a href=http://example.com>...</a>

          實例演示用法:

          using System.Text.RegularExpressions;

          namespace ConsoleAppC

          {

          internal class Program

          {

          static void Main(string[] args)

          {

          string inputString = @"<a href=""http://example.com"">Link</a>

          <a href='http://another.example.com'>Another Link</a>

          <a href=http://noquotes.example.com>No Quotes Link</a>";

          string hrefPattern = @"href\s*=\s*(?:[""'](?<1>[^""']*)[""']|(?<1>[^>\s]+))";

          MatchCollection matches = Regex.Matches(inputString, hrefPattern);

          foreach (Match match in matches)

          {

          Console.WriteLine(match.Value); // 輸出匹配到的href屬性值

          Console.WriteLine($"Found href value: {match.Groups[1].Value} at index: {match.Groups[1].Index}");

          }

          }

          }

          }


          運行這段代碼后,將輸出如下結果:

          href="http://example.com"

          Found href value: http://example.com at index: 9

          href='http://another.example.com'

          Found href value: http://another.example.com at index: 72

          href=http://noquotes.example.com

          Found href value: http://noquotes.example.com at index: 150

          為了給大家演示如何使用這個正則表達式,我們再看以下例子:

          假設我們有以下的HTML片段:

          <a href="https://www.example.com">Click here</a>

          <a href='https://www.example.org'>Go there</a>

          <a href="https://www.example.net" target="_blank">Open external link</a>

          使用上述的正則表達式,我們可以提取所有的href屬性值:

          string input = @"<a href=\""https://www.example.com\"">Click here</a>

          <a href='https://www.example.org'>Go there</a>

          <a href=\""https://www.example.net\"" target=\""_blank\"">Open external link</a>";

          代碼為:

          string hrefPattern = @"href\s*=\s*(?:[""'](?<1>[^""']*)[""']|(?<1>[^>\s]+))";

          Regex regex = new Regex(hrefPattern, RegexOptions.IgnoreCase | RegexOptions.Compiled);

          MatchCollection matches = regex.Matches(input);

          foreach (Match match in matches)

          {

          Console.WriteLine($"Found href: {match.Groups["1"].Value}");

          }

          string input = @"<a href=\""https://www.example.com\"">Click here</a>

          輸出將是:

          Found href: \"https://www.example.com\"

          Found href: https://www.example.org

          Found href: \"https://www.example.net\"

          注意,這個正則表達式并不完美,它可能無法處理所有可能的HTML格式,但對于簡單的用途來說可能已經足夠了。


          主站蜘蛛池模板: 亚洲.国产.欧美一区二区三区| 国产成人精品一区二区秒拍| 免费一区二区视频| 一区二区三区伦理高清| 中文字幕亚洲综合精品一区| 一区二区三区无码高清| 国产精品高清一区二区三区不卡| 综合久久一区二区三区| 日韩美女在线观看一区| 一区二区三区在线观看| 国产午夜精品一区理论片| 日本一区二区三区在线视频观看免费| 日韩精品一区二区亚洲AV观看 | 91精品一区国产高清在线| 亚洲av无一区二区三区| 精品性影院一区二区三区内射| 精品日韩在线视频一区二区三区 | 中文字幕aⅴ人妻一区二区| 国产乱码精品一区三上 | 国产精品夜色一区二区三区| 亚洲一区二区三区在线观看精品中文| 日韩视频在线一区| 亚洲av无码一区二区三区在线播放 | 国内精品视频一区二区三区八戒| 无码成人一区二区| 国产精品熟女一区二区| 91精品一区国产高清在线| 国产精品 视频一区 二区三区| 国产乱子伦一区二区三区| 免费看AV毛片一区二区三区| 亚洲性无码一区二区三区| 亚洲一区二区三区写真| 极品尤物一区二区三区| 一区二区传媒有限公司| 少妇一夜三次一区二区| 日本国产一区二区三区在线观看| 亚洲AV无码一区二区三区久久精品| 国产精品久久久久久麻豆一区 | 亚洲国产成人久久一区WWW| 无码精品前田一区二区| 精品亚洲av无码一区二区柚蜜|