<div.+?c-container[^>]+?>(.*)</div>
解决方案 »
- DEV gridcontrol 按钮列 按钮事件问题
- ListViewItem.ListViewSubItem lvsi;是什么意思,ListViewItem.ListViewSubItem是属性还是类呢?
- DataTable 导出doc(C#) 在线等 急用
- C# 调用c++ dll 尝试读取或写入受保护的内存 错误
- C#初学者的问题!!!
- C# 2.0如何实现DrawImage生成图片二进制(*bin)输出
- 还是正则表达式的问题
- 如何在C#工程里加入一个依赖的C#dll库
- webbrowser 如何自动加载下一页呢
- 如何通过视频链接解析到视频的文件信息
- win7系统 放大或缩小文本和其他项目所引发的问题
- 弱弱的问一下:如何知道自己建立的C#工程是unicode的还是ascii的
<div name="abc" class="result-op c-container xpath-log"
你又怎么办呢?正则就是瞎匹配,根本不懂 html 语法。进行 html 分析根本不是用正则表达式。
比如你完全可以用 linq to xml
string s = @"<div class=""result-op c-container xpath-log""></div>
<div class=""result-op c-container""></div>
<div class=""result c-container ""></div>";
MatchCollection matches = Regex.Matches(s, @"(<div\sclass=.*?c-container[^>]*?></div>)");
foreach (Match m in matches)
{
Console.WriteLine(m.Groups[1].Value);
}
比如你完全可以用 linq to xml
我想过不用正则,但不知用什么,谢谢提醒
介绍: HTML Agility Pack:簡單好用的快速 HTML Parser
把下面的代码里面的html替换成你的html源码就可以 public static void Extract()
{
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(html);
HtmlNode root = doc.DocumentNode;
//移除所有script节点
foreach(HtmlNode script in root.Descendants("script"))
script.Remove();
//移除所有style节点
foreach(HtmlNode style in root.Descendants("style"))
style.Remove();
//移除所有comment节点
foreach(HtmlNode comment in root.Descendants("//comment()"))
comment.Remove();
HtmlNodeCollection nodes = root.SelectNodes("/div[contains(@class, 'c-container')]");
if (null != nodes) {
for (int i = 0; i < nodes.Count; ++i) {
Console.WriteLine(string.Format("class: {0}", nodes[i].GetAttributeValue("class", "")));
}
}
}
可以用 LINQ 扩展方法筛选加抽选,就可以了,大致代码如下(没有运行过,提供思路):public static IEnumerable<HtmlNode> GetDistinctSampleNodes(string url)
{
// save4me 的代码......
HtmlNodeCollection nodes = hdoc.DocumentNode.SelectNodes("/div[contains(@class, 'c-container')]"); if (nodes != null)
{
var classNames = nodes.Select(node => node.Attributes["class"].Value).Distinct();
foreach (var className in classNames)
{
yield return nodes.Where(node => node.Attributes["class"].Value == className).First();
}
}
}