用C#怎么提取a标签的超链接?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用C#怎么提取a标签的超链接?相关的知识,希望对你有一定的参考价值。
请问<a href="#none" clstag="shangpin|keycount|product|yanse-米色">这种a标签里的href用C#怎么能提取出url?我遍历了所有的超链接,也没有找到我需要的。
第一种方法,正则表达式。如下所示string reg = @"<a[^>]*href=([""\'])?(?<href>[^\'""]+)\\1[^>]*>";
var item = Regex.Match(str, reg, RegexOptions.IgnoreCase);
Console.WriteLine(item.Groups["href"].Value);
第二种使用htmlagilitypack的xpath进行提取
HtmlNodeCollection atts = _doc.DocumentNode.SelectNodes("//a[@href]");
一般在使用爬虫时都会用自有的框架进行数据提取和分离。其中正则比较简洁和高效。但需要提前调试好。第三方控件使用起来比较容易而且还有其他功能可以辅助使用。 参考技术A
你需要一些用于提取括号的函数:
❶ ListIndex(str, '<', '>') 返回所有尖括号的位置索引。『SortedList<int,int> 』
❷ Cut(str, '\\"', '\\"') 返回第一个双引号内的内容。『string』
❸ CutAll(str, '<', '>') 返回所有尖括号内的内容。『List<string>』
/// <summary>
/// 获取指定开始字符和结束字符的所有位置。
/// <para>返回一个int,int有序列表,Key表示开始字符的位置,Value表示结束位置。</para>
/// <para>"(ad)b(c)b(ea)".ListIndex('(',')') = [0, 3],[5, 7],[9, 12]</para>
/// <para>将忽略处于其他开始和结束字符内部的开始字符。</para>
/// </summary>
public static SortedList<int,int> ListIndex(this string str, char 开始字符, char 结束字符)
int len = str.Length;
SortedList<int, int> list = new SortedList<int, int>();
if (len < 2) return list;
int 开始位置 = 0;
int 结束位置 = 0;
//搜索开始字符
while ((开始位置 = str.IndexOf(开始字符, 开始位置)) != -1)
//搜索结束字符
while ((结束位置 = str.IndexOf(结束字符, 开始位置 + 1)) != -1)
list.Add(开始位置, 结束位置);
开始位置 = 结束位置 + 1;
break;
return list;
/// <summary>
/// 截取并返回指定「开始字符」和 「结束字符」之间的字符串。〈<see cref="string"/>〉
/// <para>可以指定是否包括「开始字符」和「结束字符」。默认为不包括。</para>
/// <para>❶ "abcde".Cut('b', 'd', false, false) 返回值 ➤ "c" </para>
/// <para>❷ "abcde".Cut('b', 'd', true, false) 返回值 ➤ "bc" </para>
/// <para>❸ "abcde".Cut('b', 'd', false, true) 返回值 ➤ "cd" </para>
/// <para>❹ "abcde".Cut('b', 'd', true, true) 返回值 ➤ "bcd" </para>
/// <para>如果「开始位置」大于「结束位置」或「开始位置」小于 0 或「结束位置」小于 0 ,则返回空字符串「<see cref="string.Empty"/>」。</para>
/// <para>如果没有「结束字符」,则返回空字符串。</para>
/// </summary>
/// <param name="str">该字符串本身</param>
/// <param name="开始字符">开始的Index,从0开始</param>
/// <param name="结束字符">结束字符char</param>
/// <param name="包括开始字符">默认false。表示返回字符串中不包括开始字符</param>
/// <param name="包括结束字符">默认false。表示返回字符串中不包括开始字符</param>
/// <returns>截取并返回指定 开始位置 和 结束字符 之间的字符串。</returns>
public static string Cut(this string str, char 开始字符, char 结束字符, bool 包括开始字符 = false, bool 包括结束字符 = false)
int len = str.Length;
int a = 包括开始字符 ? 1 : 0;
int b = 包括结束字符 ? 1 : 0;
int 开始 = str.IndexOf(开始字符, 0);
int t = 开始 + 1;
int 结束 = str.IndexOf(结束字符, t);
if (开始 < 0 || 开始 > 结束 || 结束 < 0) return "";
if (结束 > len) return str.Substring(t);
int 长度 = 结束 - t;
return str.Substring(t - a, 长度 + a + b);
/// <summary>
/// 指定开始字符和结束字符并返回List截取的字符串。不包括开始字符和结束字符。
/// <para>"adbcbea".Cut('a','b') = "d"</para>
/// <para>如果开始位置大于结束位置或小于0,则返回空List(Of String)。</para>
/// <para>如果没有结束字符,则不会识别,返回空List(Of String)。</para>
/// </summary>
public static List<string> CutAll(this string str, char 开始字符, char 结束字符)
int len = str.Length;
List<string> list = new List<string>();
if (len < 2) return list;
bool 已展开 = false;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < len; i++)
char c = str[i];
if (已展开 == false)
if (c == 开始字符) 已展开 = true; sb.Clear();
else
if (c == 结束字符) 已展开 = false; list.Add(sb.ToString()); else sb.Append(c);
return list;
参考技术B 那就用正则提取
使用 c# 在 OpenOffice calc 中的超链接
【中文标题】使用 c# 在 OpenOffice calc 中的超链接【英文标题】:Hyperlink within a OpenOffice calc using c# 【发布时间】:2012-07-17 13:00:31 【问题描述】:我在 openoffice 中使用 c# 制作了一个电子表格,其中包含几个不同的工作表。在工作表 1 上是工作表其余部分的所有名称的列表。如何设置从每个单元格到相应工作表的超链接。
我浏览了互联网,但我一直在努力寻找任何有用的信息。谁能指出我如何编程的正确方向?
【问题讨论】:
【参考方案1】:我不确定我是否理解正确,但这可能会有所帮助,请将其放在您的牢房中:
=HYPERLINK("MyTableName.C3")
这(应该)跳转到表 MyTableName 中的单元格 C3。 要跳转到表格,请使用
=HYPERLINK("#MyTableName")
我无法尝试,因为我不使用 OpenOffice
来源:http://www.ooowiki.de/HyperLink
【讨论】:
对不起,我已经非常清楚地解释了我的问题。我用 c# 制作了这个电子表格,我问如何使用 c# 创建超链接 将 =HYPERLINK() 公式放入单元格中 我从 plm 文件中取出数据并将它们放入一个空白的电子表格文件中,因此我没有直接在电子表格文件中输入任何内容,这一切都是在 Visual Studio 中使用 c# 完成的 然后使用类似myCell = string.Format("=HYPERLINK(\"#0\")", TableName);
我收到错误消息“无法将类型'string'隐式转换为'unoidl.com.sun.star.table.XCell”以上是关于用C#怎么提取a标签的超链接?的主要内容,如果未能解决你的问题,请参考以下文章
php高手请进:正则提取超链接中的网址和标题,如果兼顾有双引号和单引号或没有引号的超链接?
用excel怎么制作文件夹结构索引,并在每个文件夹名上加上指向文件夹的超链接?