首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 正则表达式提取HTML的特定的字符串(在线) [已结贴,结贴人:qq_2597116]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 18:07:44 楼主
    我用HttpWebRequest取得了一个远程的完整的HTML字符

    问题:
    我如何取出我要的这段

    HTML code
    <table width="99%" align="center" id="main-content" cellpadding="2" cellspacing="0"> <---开头 XXXXXXX <----多行任意HTML代码 </td></tr></table> <---结尾



    70  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hackztx
    • 等级:
    发表于:2008-05-17 18:14:201楼 得分:0
    C# code
    using System; using System.Data; using System.Text.RegularExpressions; class Test { static void Main() { string strHtml = "你得到的HTML"; MatchCollection mc = Regex.Matches("<table>[\\s\\S].*?</table>"); foreach (Match m in mc) { Console.WriteLine(m.Value); } } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hackztx
    • 等级:
    发表于:2008-05-17 18:15:082楼 得分:0
    C# code
    using System; using System.Data; using System.Text.RegularExpressions; class Test { static void Main() { string strHtml = "你得到的HTML"; MatchCollection mc = Regex.Matches("<table.*?>[\\s\\S].*?</table.*?>");//正则修改了下!这样好一些! foreach (Match m in mc) { Console.WriteLine(m.Value); } } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 18:36:283楼 得分:0
    如果楼主所获取到的页面代码中只有一个table,即没有table嵌套的时候
    可以使用下面的正则表达式获取到
    C# code
    <table[^>]+?>[\s\S]*?\</table>


    如果有嵌套的时候,这就涉及到正组式平衡组的判定。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 18:59:164楼 得分:0
    引用 1 楼 hackztx 的回复:
    C# codeusing System;
    using System.Data;
    using System.Text.RegularExpressions;
    class Test
    {

        static void Main()
        {
            string strHtml = "你得到的HTML";
            MatchCollection mc = Regex.Matches(" <table>[\\s\\S].*? </table>");
            foreach (Match m in mc)
            {
                Console.WriteLine(m.Value);
            }
        }
    }



    奇怪,你这行有错,说非公共成员要引用
    Dim mc As MatchCollection = Regex.Matches(" <table>[\\s\\S].*? </table>")

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 19:23:365楼 得分:0
    上面的MatchCollection mc = Regex.Matches(" <table>[\\s\\S].*? </table>");

    MatchCollection这个不能直接用
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hackztx
    • 等级:
    发表于:2008-05-17 19:30:186楼 得分:0
    C# code
    using System; using System.Data; using System.Text.RegularExpressions; class Test { static void Main() { string strHtml = "你得到的HTML"; MatchCollection mc = Regex.Matches(strHtml,"<table.*?>[\\s\\S].*?</table.*?>"); foreach (Match m in mc) { Console.WriteLine(m.Value); } } }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 20:47:067楼 得分:0
    还是不行,是不是这个正则表达式有问题???

    ^\ <table width\=\""99\%\"" align\=\""center\"" id\=\""main\-content\"" cellpadding\=\""2\"" cellspacing\=\""0""\>[\\s\\S].*?\ <\/td\>\ <\/tr\>\ <\/table\>$


    VB.NET code
    Dim sRemote As String = "^\<table width\=\""99\%\"" align\=\""center\"" id\=\""main\-content\"" cellpadding\=\""2\"" cellspacing\=\""0""\>[\\s\\S].*?\<\/td\>\<\/tr\>\<\/table\>$" Dim strHtml As String = GetRequestString(spath, 5000, 0, UTF8Encoding.UTF8) strHtml = GetRegValue(strHtml, sRemote) Me.Label1.Text = strHtml



    VB.NET code
    Public Function GetRegValue(ByVal RegexString As String, ByVal RemoteStr As String) Dim MatchVale As String = "" Dim r As Regex = New Regex(RegexString) Dim m As Match = r.Match(RemoteStr) If m.Success Then MatchVale = m.Value End If Return MatchVale End Function
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 20:59:498楼 得分:0
    郁闷,自己顶一下
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-17 21:44:359楼 得分:0
    没人会吗???????
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-18 10:19:1610楼 得分:0
    " <table[^>]*>[\\s\\S]* </table>"
    这样试试?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-18 11:36:4611楼 得分:0
    引用 10 楼 scjtswj 的回复:
    " <table[^>]*>[\\s\\S]* </table>"
    这样试试?



    这个表达式真的很难吗????
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-18 14:15:3512楼 得分:70
    C# code
    string tt = "<table width=\"99%\" align=\"center\" id=\"main-content\" cellpadding=\"2\" cellspacing=\"0\"><tr><td><table><tr><td></td></tr></table></td></tr></table>"; string reg = @"<table[^>]*>(?<sss>[\s\S]*)</td></tr></table>"; Match m = Regex.Match(tt, reg, RegexOptions.IgnoreCase); string result = m.Groups["sss"].ToString();


    vs2005下测试通过
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    世纪乐知(北京)网络技术有限公司 版权所有 京 ICP 证 020026 号
    Copyright © 2000-2007, CSDN.NET, All Rights Reserved