C#使用正则表达式解析超链接文本和地址

表达式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";   
 }


 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值