<div class=music><table><tr><td>(?<content>[^<>]+)</td></tr></table></div>
解决方案 »
- C#在 windowform中的textbox
- 写入XM时中断了,再次打开出错怎么处理?
- dataview的查询和转化问题。希望高手过来指点一下,感激不尽啊。在线等。急急急!!
- C# WinForm程序在啟動主窗體前執行更新文件(exe)
- --==PDF打印==--itext在内存中生成pdf流后不想保存成文件,而是直接在页面上显示怎么搞阿?
- 请教一个重绘操作的做法,以zedGraph为背景做GDI画图,重绘事件怎么处理
- 简单问题求助!!
- 怎样做个“浏览”来选择文件夹,用哪个类?
- Text='<%# DataBinder.Eval(Container, "DataItem.employeeid") %> 具体是什么意思啊
- 在c#控制台程序中怎么把一个XML文件读出来吖?
- 一直搞BS开发,突然坐cs开发,问二个grid的问题
- file.exists的问题,如何判断一个文件是否存在
先用表达式定位到<div class=music><table><tr><td>.....</td></tr></table></div>
然后对这个字符串,使用表达式识别每一个html标记,用Stack可以获得文字。
/<div>(.|\W)*<\/div>/i
我想做一个某网站页面内容的提取程序,要提取的页面内容包含在<div calssid=music>...</div>之中,现在的问题是在这个<div>中包含有<table><div>等其它标记,
类似于
<div calssid=music>
<table><tr><td><div><img ...></div></td></tr></table>
</div>
而且在<table>中可能包含有其它更多的标记及<div>标记
我如何将<div calssid=music>...</div>这部分内容全部提取出来呢?
public string GetPage(string url, string flag, int pos)
{
if (url == "") return null; //url
if (flag == "") return null;//标记
if (pos < 0) return null; //第几个标记 WebRequest wq = WebRequest.Create(url);
WebResponse wp;
try
{
wp = wq.GetResponse();
}
catch(Exception e)
{
return e.Message;
} //获取整个URL内容
StreamReader sr = new StreamReader(wp.GetResponseStream(),Encoding.Default);
string s = sr.ReadToEnd();
sr.Close();
wp.Close();
//提取flag之间的内容,比如<table>...</table>或者<td>...</td>
string flagstart = "<" + flag;
string flagend = "</" + flag + ">";
int startpos = 0;
int endpos = 0; Regex r = new Regex(flagstart,RegexOptions.IgnoreCase);
Regex r1 = new Regex(flagend,RegexOptions.IgnoreCase);
MatchCollection mc = r.Matches(s);
MatchCollection mc1 = r1.Matches(s); int stack = 0;
int i = pos;
int j = 0; //while ((i < mc.Count) && (j < mc1.Count) && (mc[i].Index > mc1[j].Index)) j++; while ((i < mc.Count) && (j < mc1.Count))
{
if (mc[i].Index < mc1[j].Index)
{
stack ++;
if (i < mc.Count) i ++;
}
else
{
if (j < mc1.Count) j ++;
if (stack == 0) continue;
if (--stack == 0) break;
}
//Console.WriteLine(stack);
} if (stack == 0)
{
j--;
i--;
}
else
{
while (j < mc1.Count)
{
j ++;
if (--stack == 0) break;
//Console.WriteLine(stack);
} if (stack == 0)
{
j--;
i--;
}
} if ((i < mc.Count) && (j < mc1.Count))
{
startpos = mc[i].Index;
endpos = mc1[j].Index + flagend.Length;
} s = s.Substring(startpos,endpos-startpos+1);
return s;
}