一个标签类似:<a href=\"play.html?c=frocalxod9b740yx\" title=\"活动\">
获取a标签中href的值表达式为:
Regex reg = new Regex(@"(?is)<a[^>]+?href=(['""]?)(?<url>[^'""\s>]+)\1[^>]*>(?<text>(?:(?!</?a\b).)*)</a>");
现在希望获取title的值,修改为如下,但是无法匹配,请大神帮忙看看有什么错误:
Regex reg = new Regex(@"(?is)<a[^>]+?href=(['""]?)(?<url>[^'""\s>]+).*?title=""(.*?)""\1[^>]*>(?<text>(?:(?!</?a\b).)*)</a>");
------解决思路----------------------
你最起码应该先要举出1、2个更准确的测试用例,例如
<a HREF=\"play.html?c=frocalxod9b740yx&title=mms\" data-bind=\"xyz\" title=\"活动\">
这样的也必须准确找到。
------解决思路----------------------
比如说 title="活动" 这里边在=号前边有个空格,你就没有考虑到吧?!
正规的html分析不用正则,应该用正规的html语法分析框架程序。
正则只是做点随便瞎”玩儿“的业余小练习还行,真正的抓取操作,面对的结构多变、目标网页可能随时更新版本,不能用什么正则来作为工具。
------解决思路----------------------
<a 和 title 之间就不需要那么复杂的匹配了。
------解决思路----------------------
string html = @"<a href=""play.html?c=frocalxod9b740yx"" title=""活动"">";
string patten = @"<a\s+.*?href=""([^""]*)""\s+.*?title=""([^""]*)"".*?>";
Regex.Matches(html, patten).Cast<Match>().ToList().ForEach(x=>
{
Console.WriteLine(string.Format("href:{0} title:{1}", x.Groups[1].Value, x.Groups[2].Value));
});
------解决思路----------------------
string text = @"<a href=""play.html?c=frocalxod9b740yx"" title=""活动"">";
string patten = @"(href
------解决思路----------------------
title)=""([^""]*)";
Regex.Matches(text, patten).Cast<Match>().ToList().ForEach(x =>
{
Console.WriteLine(string.Format("{0}: {1}", x.Groups[1].Value, x.Groups[2].Value));
});