表达式1,获取href地址:
(?is)<a[^>]*?href=(['""\s]?)(?<href>[^'""\s]*)\1[^>]*?>
c#代码:
Regex reg = new Regex(@"(?is)<a[^>]*?href=(['""\s]?)(?<href>[^'""\s]*)\1[^>]*?>");
MatchCollection match = reg.Matches(textBox1.Text);
foreach (Match m in match)
{
textBox2.Text += m.Groups["href"].Value;
}
表达式2,可获取文本和地址:
<a.*?(?: |\t|\r|\n)?href=[\'"]?(.+?)[\'"]?(?:(?: |\t|\r|\n)+.*?)?>(.+?)<\/a.*?>
有时<a></a>中间还有<img>,可以参考以下代码去除:
string html = 要匹配的字符串;
Regex reg = new Regex(@"<a\s*[^>]*>([\s\S]+?)</a>", RegexOptions.IgnoreCase);
Match m = reg.Match(html);
while(m.IsSuccess)
{
string innerHTML = m.Result("$1");// 得到正则的括号里的内容,就是a的innerHTML
innerHTML = Regex.Replace(innerHTML, @"<[^>]*>", "",RegexOptions.IgnoreCase);// 替换掉里面的html,只保留文字
m = m.NextResult;// 循环匹配html里的下一个结果
}
另外还搜到一个表达式,测试了一下好像没用,留着参考:
Regex reg = new Regex(@"(?is)<a(?:(?!href=).)*href=(['""]?)(?<url>[^""\s>]*)\1[^>]*>(?<text>(?:(?!</?a\b).)*)</a>");
MatchCollection mc = reg.Matches(str);
foreach (Match m in mc)
{
TextBox1.Text += m.Groups["url"].Value + "\n";
richTextBox2.Text += m.Groups["text"].Value + "\n";
}
本文介绍如何使用正则表达式从HTML中提取链接地址和文本内容,并提供了一个简化匹配过程的代码示例,同时讨论了如何处理嵌套元素如<img>。此外,文章还分享了一个用于匹配并解析<a>标签的复杂正则表达式。
2万+

被折叠的 条评论
为什么被折叠?



