html标记如下:
...
<div id=div1>
<div>
<ol>
<li class=g>
<h3 class=r>
<a href="...">文字</a>
<div>其他内容</div>
<li class=g>
<h3 class=r>
<a href="...">文字</a>
<div>其他内容</div>
<li class=g>
<h3 class=r>
<a href="...">文字</a>
<div>其他内容</div>
</ol>
</div>
</div>
...
问题1. 要查找div1里的每个<li class=g>内容,保存在string[]中
问题2. 要查找div1里的每个<li class=g>里a标记href内容,如何操作
thanks
...
<div id=div1>
<div>
<ol>
<li class=g>
<h3 class=r>
<a href="...">文字</a>
<div>其他内容</div>
<li class=g>
<h3 class=r>
<a href="...">文字</a>
<div>其他内容</div>
<li class=g>
<h3 class=r>
<a href="...">文字</a>
<div>其他内容</div>
</ol>
</div>
</div>
...
问题1. 要查找div1里的每个<li class=g>内容,保存在string[]中
问题2. 要查找div1里的每个<li class=g>里a标记href内容,如何操作
thanks
string id = "res";
string pattern = @"<([a-z]+)(?:(?!\bid\b)[^<>])*id=([""']?){0}\2[^>]*>(?><\1[^>]*>(?<o>)|</\1>(?<-o>)|(?:(?!</?\1).)*)*(?(o)(?!))</\1>";
Match match = Regex.Match(source, string.Format(pattern, Regex.Escape(id)), RegexOptions.Singleline | RegexOptions.IgnoreCase);
Console.WriteLine("--------begin {0}--------", id);
if (match.Success)
{
string test = match.Value; string[] results = test.Split(new string[]{"<li class=g>"}, StringSplitOptions.None);
foreach (string result in results)
{
Console.WriteLine("-------------------", id);
Console.WriteLine(result);
//下面再做判断
}
}
Console.WriteLine("--------end {0}--------", id);但感觉没有您写的优雅
你先获取div1的内容。
string str=div1Content;
然后用正则获取li class=g的内容
Regex reg=new Regex("<li class=g>(.+?)</li>");
for(int i=0;i<reg.Matchs(div1Content).Count;i++)
{
string temValue=reg.Matchs(div1Content)[i].Group[1].value;//获取li class=g的内容
//至于保存于string[]中,我想楼主应该有方法。这里不写了。
//获取内容后,再获取a标签
String MyHrefPattern = @"<a[^>]+href=\s*(?:'(?<href>[^']+)'|""(?<href>[^""]+)""|(?<href>[^>\s]+))\s*[^>]*>(?<text>.*?)</a>"; //提取超链接的正则表达式
Regex MyHrefRegex = new Regex(MyHrefPattern, RegexOptions.IgnoreCase | RegexOptions.Compiled);
}
以上代码是手打,如果有误,楼主自己在VS里调试。。
具体思路是这样的,楼主研究一下吧。
-------------------
取<li class=g>里的<h3 class=r>中的a标记的href(首先要保证链接,其次考虑文字),每个<h3 class=r>中应该只有一个a标记,如果有多个,取第一个
List<string> listLi = new List<string>();
List<string> listA = new List<string>();
Regex regDiv = new Regex(@"(?is)<div[^>]*?id=(['""]?)" + id + @"\1[^>]*>(?><div[^>]*>(?<o>)|</div>(?<-o>)|(?:(?!</?div\b).)*)*(?(o)(?!))</div>");
Regex regLi = new Regex(@"(?is)<li\s+class=g>\s*(.*?)\s*(?=</?(li|ol)\b)");
Regex regA = new Regex(@"(?is)<a\b[^>]*?href=(['""])(?<link>[^'""\s>]+)\1[^>]*>(?<text>.*?)</a>");
Match mDiv = regDiv.Match(yourStr);
if(mDiv.Success)
{
MatchCollection mcLi = regLi.Matches(mDiv.Value);
foreach (Match mLi in mcLi)
{
listLi.Add(mLi.Groups[1].Value);
Match mA = regA.Match(mLi.Groups[1].Value);
if (mA.Success)
{
listA.Add(mA.Value);
}
}
}
<a href="http://stock.sohu.com/gzqh/" target=_blank class=l><em>股指期货</em>-搜狐证券</a>
能方便的得到 http://stock.sohu.com/gzqh/ 和 <em>股指期货</em>-搜狐证券 吗?万分感谢!
List<string> listLi = new List<string>();
List<string> listLink = new List<string>();
List<string> listText = new List<string>();
Regex regDiv = new Regex(@"(?is)<div[^>]*?id=(['""]?)" + id + @"\1[^>]*>(?><div[^>]*>(?<o>)|</div>(?<-o>)|(?:(?!</?div\b).)*)*(?(o)(?!))</div>");
Regex regLi = new Regex(@"(?is)<li\s+class=g>\s*(.*?)\s*(?=</?(li|ol)\b)");
Regex regA = new Regex(@"(?is)<a\b[^>]*?href=(['""])(?<link>[^'""\s>]+)\1[^>]*>(?<text>.*?)</a>");
Match mDiv = regDiv.Match(yourStr);
if(mDiv.Success)
{
MatchCollection mcLi = regLi.Matches(mDiv.Value);
foreach (Match mLi in mcLi)
{
listLi.Add(mLi.Groups[1].Value);
Match mA = regA.Match(mLi.Groups[1].Value);
if (mA.Success)
{
listA.Add(mA.Groups["link"].Value);
listA.Add(mA.Groups["text"].Value);
}
}
}