用正则取得网页中指定的表格,正则的高手们帮帮忙啊,谢谢了

mychinabc 2007-12-13 09:01:46

现用:<table[\s\S]+</table>能取得网页中的表格,但有一个缺点,就是只有一个表格时能正确取出,但是有二个以上的表格那就会把几个表格(包含之间的数据)一起取出来,现在我想的是只想取出包含script代码的表格,其它的表格不取,正则如何写呢?
高手们指点一下,谢谢了.
...全文
149 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
honey52570 2008-01-04
  • 打赏
  • 举报
回复
有时候脑子要转弯
mychinabc 2008-01-04
  • 打赏
  • 举报
回复
谢谢ls的,我不是取得<form和</form>中的值啊,是想问如何用正则把有广告的表格去掉,没有广告的保留,
关键的一点如何表判断这表格的区别,用上面我的正则把所有的表格一下子都取在一个字符串里面了,我只是想一个表表格一个表格的取,如何写正则呢?
yjinzaghi 2007-12-28
  • 打赏
  • 举报
回复
你可以先把<form></form>读取出来,在通过字符串取值。


.js
//url (你需要访问的页面)
function makeRequest8DNO(url)
{
http_request = false;
if (window.XMLHttpRequest)
{
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType)
{
http_request.overrideMimeType('text/xml');
}
}
else if (window.ActiveXObject)
{ // IE
try
{
http_request = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
try
{
http_request = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e) {}
}
}
if (!http_request)
{
alert('Giving up :( Cannot create an XMLHTTP instance');
return false;
}
http_request.onreadystatechange = alertContents8DNO;
http_request.open('post', url, false);
http_request.send(null);
}
function alertContents8DNO()
{
if (http_request.readyState == 4)
{
if (http_request.status == 200)
{
var kk=http_request.responseText;
document.getElementById("mydivT").innerHTML=kk.substring(kk.indexOf("<form")+num,kk.indexOf("</form>"));
//alert(document.getElementById("mydivT").innerHTML);
}
else
{
alert('There was a problem with the request');
}
}
}

num 根据你自己的情况取值(如 num=10)
mychinabc 2007-12-27
  • 打赏
  • 举报
回复
谢谢root_,就是想取出来替换成空格,把一个有广告的表格去掉,很明白了吧,但只去掉有广告的表格,
其它的表格保留:_)
root_ 2007-12-24
  • 打赏
  • 举报
回复
一会提取,一会替换的,都不知道你自己明不明白自己想要做什么

算了,最后再写一次,上面的是替换,这个是提取,再有其它要求,那我也不会过问了

string test = @"<table ....>xxxxx
xxxx
</table>

相关文字
...
<table>
<tr>

<td>
<script.....>//这里是script的广告代码,我想只取得这里的表格,并用""替换掉,但这里有二个表格的话取得就会
二个表格最后一直取出来,如何解决啊,请各位高手指点一下,谢谢了:)
</script>
</td></tr></table>
";
Match m = Regex.Match(test, @"<table[^>]*>(?:(?!<table[^>]*>)[\s\S])*?</script>(?:(?!<table[^>]*>)[\s\S])*?</table>", RegexOptions.IgnoreCase);
if (m.Success)
MessageBox.Show(m.Value);
mychinabc 2007-12-24
  • 打赏
  • 举报
回复
上面的正则可以取出所有表来,就是有二个以上表格的话会把最前一个表到最后一个表中间的数据取出来,如何只取出含有script的表呢?
root_ 2007-12-24
  • 打赏
  • 举报
回复
一个正则也可以做到,但是效率比较低,可以用委托来做

string result = Regex.Replace(str, @"<table[^>]*>[\s\S]*?</table>", myEvaluator, RegexOptions.IgnoreCase);


private string myEvaluator(Match m)
{
if (m.Value.ToLower().IndexOf("</script>") > -1)
return "";
return m.Value;
}
JGood 2007-12-23
  • 打赏
  • 举报
回复
先把各个表格的html取出来
再分别处理含有<script>的匹配
mychinabc 2007-12-23
  • 打赏
  • 举报
回复
我说详细一点吧:
网页中有二个以上的表格,其中有一个表中有<scrip...>代码,是广告代码,我想把这段的广告去掉,如何取得包含这个srctip的表呢,如何写正则表达式?


大家来出个主意吧
root_ 2007-12-17
  • 打赏
  • 举报
回复
你倒底是要提取还是要替换,给个具体点的例子,给出你要的结果
mychinabc 2007-12-17
  • 打赏
  • 举报
回复
没有人气啊,还是自己来顶,等
mychinabc 2007-12-16
  • 打赏
  • 举报
回复
我认为这里面的\s\S把所有的字符都包含了,所以后面限定script就好像没有什么用了,5555,想不出来啊,痛苦!~~
mychinabc 2007-12-16
  • 打赏
  • 举报
回复
谢谢LS的,我试了一下,不行.
情况如下:


<table ....>xxxxx
xxxx
</table>

相关文字
...
<table>
<tr>

<td>
<script.....>//这里是script的广告代码,我想只取得这里的表格,并用""替换掉,但这里有二个表格的话取得就会
把第一个表格一直到第二个表格最后一直取出来,如何解决啊,请各位高手指点一下,谢谢了:)
</script>
</td></tr></table>
mychinabc 2007-12-16
  • 打赏
  • 举报
回复
自己再进来顶一下:)
eastfar 2007-12-16
  • 打赏
  • 举报
回复
顶一下,等待高手们
wuhq030710914 2007-12-14
  • 打赏
  • 举报
回复
<table[\s\S]+?<script[^>]+?>[\s\S]+?</script>[\s\S]+?</table>

上面没有考虑到script的type等属性
wuhq030710914 2007-12-14
  • 打赏
  • 举报
回复
<table[\s\S]+?<script>[\s\S]+?</script>[\s\S]+?</table>

这样试试
symbol441 2007-12-14
  • 打赏
  • 举报
回复
<table[\s\S]+ </table>
====
加一个限定

<table[\s\S]+?</table>
mychinabc 2007-12-13
  • 打赏
  • 举报
回复
自己顶一下,等待高手们

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧