如何从C#中的字符串中提取href标签?

Posted

技术标签:

【中文标题】如何从C#中的字符串中提取href标签?【英文标题】:How to extract href tag from a string in C#? 【发布时间】:2014-04-04 18:04:57 【问题描述】:

我有一个方法可以返回以下格式的字符串:

string tableTag = "<th><a href="Boot_53.html">135 Boot</a></th>"

我想获取href 属性的值并将其存储到另一个名为link 的字符串中:

string link = "Boot_53.html"

换句话说,link 应在字符串中分配href 属性。我怎样才能做到这一点?

【问题讨论】:

How can I do that in C#? 不是一个好问题。展示你到目前为止所尝试的,你被卡住的地方.. 看看这个 SO 答案***.com/a/15926523/1593273 【参考方案1】:

您可以使用诸如HTML agility pack 之类的 HTML 解析器来解析输入的 HTML 并提取您要查找的信息:

using HtmlAgilityPack;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

class Program

    static void Main(string[] args)
    
        var doc = new HtmlDocument();
        string tableTag = "<th><a href=\"Boot_53.html\">135 Boot</a></th>";
        doc.LoadHtml(tableTag);

        var anchor = doc.DocumentNode.SelectSingleNode("//a");
        if (anchor != null)
        
            string link = anchor.Attributes["href"].Value;
            Console.WriteLine(link);
        
    

【讨论】:

【参考方案2】:

如果您知道 html 实际上是一个 xhtml(一个符合 xml 标准的 html [或多或少]),那么您可以简单地使用专用于 xml 的工具(通常比那些用于 html 的工具更简单)来解析。

var hrefLink = XElement.Parse("<th><a href=\"Boot_53.html\">135 Boot</a></th>")
                       .Descendants("a")
                       .Select(x => x.Attribute("href").Value)
                       .FirstOrDefault();

【讨论】:

【参考方案3】:

您可以使用正则表达式:

string input= "<th><a href=\"Boot_53.html\">135 Boot</a></th>";
string regex= "href=\"(.*)\"";
Match match = Regex.Match(input, regex);
if (match.Success)

    string link= match.Groups[1].Value;
    Console.WriteLine(link);

【讨论】:

【参考方案4】:

使用HtmlAgilityPack解析HTML:

var doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml( tableTag ); 
string link = doc.DocumentNode.SelectSingleNode("//a").Attributes["href"].Value;

【讨论】:

【参考方案5】:

您可以使用 AngleSharp 作为 HtmlAgilityPack 的替代品:

var context = BrowsingContext.New(Configuration.Default);

string tableTag = "<th><a href=\"Boot_53.html\">135 Boot</a></th>";

var document = await context.OpenAsync(req => req.Content(tableTag));

var anchor = document.All.FirstOrDefault(x => x.LocalName == "a");
if (anchor != null)

    string link = anchor.GetAttribute("href"); // "Boot_53.html"

【讨论】:

以上是关于如何从C#中的字符串中提取href标签?的主要内容,如果未能解决你的问题,请参考以下文章

如何从C#中的字符串中提取十进制数

如何通过C#中的特定片段从句子中提取整个单词?

从C#中的字符串中提取十进制数[重复]

我如何根据对象标签从这个排序数组中提取碰撞数据并将该对象分配给 C# 中的目标

如何在 C# 中使用正则表达式从字符串中提取域名?

如何使用 PHP 从 XML“链接”标签中提取“href”属性?