一:前言:网页源码中有很多嵌套的标签

例如div标签嵌套如:bUTP<DIV>finally<div>aurora</div>@126.com</div><div class=\"Cited1\">ggff</div>

我们的网页解析工作中有时候需要解嵌套。通俗的讲就是把嵌套的标签以线性表的形式表示出来。还拿上面的例子来说明。即解嵌套为

<div>aurora</div>

<DIV>finally<div>aurora</div>@126.com</div>

div class=\"Cited1\">ggff</div>

核心代码如下:

Code
 class ThemeIRAssist
    {
        public static void  GetNodesByTags( ref string rawtext,string tags,ref  List<string>result )
       {   //储存开始标签的位置
           List<Position > beginTagPos = new List<Position >();
            //储存结束标签的位置
           List<Position> endTagPos = new List<Position>();
            //匹配开始标签的正则表达式
           string sBeginTagPattern = "<" + tags;
           Regex regexBeginTag = new Regex(sBeginTagPattern, RegexOptions.IgnoreCase | RegexOptions.Singleline);
           //匹配结束标签的正则表达式。
           string sEndTagPattern = "</" + tags + ">";
           Regex regexEndTag = new Regex(sEndTagPattern, RegexOptions.Singleline | RegexOptions.IgnoreCase);
            //获得开始标签的集合
           MatchCollection beginTagCollection = regexBeginTag.Matches(rawtext);
            //获得结束标签的集合
           MatchCollection endTagCollection = regexEndTag.Matches(rawtext);
           foreach (Match mymatch in beginTagCollection)
           {
              Position pos=new Position();
               pos.nPos=mymatch.Index;
               pos.VistStatus=false;
               beginTagPos.Add(pos);
               
           }

foreach (Match mymatch in endTagCollection)
           {
               Position pos = new Position();
               pos.nPos = mymatch.Index;
               pos.VistStatus = false;
               endTagPos.Add(pos);

}
           for (int i = 0; i < endTagPos.Count; i++)
           {
               for (int j = beginTagPos.Count - 1; j >= 0; j--)
               {
                   if(endTagPos[i].nPos<beginTagPos[j].nPos)
                       continue;
                   else
                   {
                       if (beginTagPos[j].VistStatus)
                           continue;
                       else
                       {
                           result.Add(rawtext.Substring(beginTagPos[j].nPos,endTagPos[i].nPos-beginTagPos[j].nPos+6));
                           beginTagPos[j].VistStatus=true;
                           break;
                       }

}
               }
           }

}
    }
    class Position
    {
       private int pos;
        private bool visited;
        public int nPos
        {
            get { return pos; }
            set { pos = value; }
       
        }
        public bool VistStatus
        {
            get { return visited; }
            set { visited = value; }
        }

}

Main函数测试如下:

Code
 static void Main(string[] args)
        {
            
            StreamReader sr = new StreamReader("D:\\finally.txt", Encoding.GetEncoding("utf-8"));
            string rawtext = sr.ReadToEnd();
           // string rawtext = "bUTP<DIV>finally<div>aurora</div>@126.com</div><div class=\"Cited1\">ggff</div>";
            List<string> result = new List<string>();
            ThemeIRAssist.GetNodesByTags(ref rawtext, "div", ref result);
            Console.WriteLine(result.Count);
            Regex regexStadard = new Regex(@"^<div\s+class=""Cited1""", RegexOptions.IgnoreCase | RegexOptions.Singleline);
            for (int i = result.Count - 1; i >= 0; i--)
            {
                if(!regexStadard.IsMatch(result[i]))
                    result.RemoveAt(i);
            }
            Console.WriteLine(result.Count);
            foreach(string s in result)
            {
                Console.WriteLine("***************************************************");
                Console.Write(s);
                Console.WriteLine("***************************************************");
            }
            Console.Read();
           
        }

网页解析:如何获得网页源码中嵌套的标签。相关推荐

  1. 易语言 网页_取文本_reg的源码

    .版本 2.子程序 网页_取文本_reg, 文本型, 公开, 去掉网页源码中的HTML标签,保留纯文本(正则方式) .参数 网页源码, 文本型, , 网页源码如果含中文且乱码的,请先解码 .局部变量 ...

  2. 1.网页源码中找到我们需要获取

    一.需求分析 二.页面分析 我们需要在网页源码中找到我们需要获取的信息.所有我们在刷新页面后出现的3个XHR下需找我们需要的信息. 依次点开找到最后一个包如图. 打开任意一个列表(这里不确定是不是列表 ...

  3. 国际网页短信后台定制源码搭建软件平台定制-移讯云短信系统

    国际网页短信后台定制源码搭建软件平台定制-移讯云短信系统 短信服务端号码通道分类功能 短信后开发按照要求有个功能是发送分流.就是当短信客户端提交过来的短信号码包含移动.联通.电信时,系统要实现不通类型 ...

  4. java毕业设计网页小游戏交流论坛源码+lw文档+mybatis+系统+mysql数据库+调试

    java毕业设计网页小游戏交流论坛源码+lw文档+mybatis+系统+mysql数据库+调试 java毕业设计网页小游戏交流论坛源码+lw文档+mybatis+系统+mysql数据库+调试 本源码技 ...

  5. JDK源码解析 迭代器模式在JAVA的很多集合类中被广泛应用,接下来看看JAVA源码中是如何使用迭代器模式的。

    JDK源码解析 迭代器模式在JAVA的很多集合类中被广泛应用,接下来看看JAVA源码中是如何使用迭代器模式的. 看完这段代码是不是很熟悉,与我们上面代码基本类似.单列集合都使用到了迭代器,我们以Arr ...

  6. japidocs怎么设置参数必填_JApiDocs 动态生成接口文档,并解析java 源码中的注释...

    1.介绍 JApiDocs 是一个符合 Java 编程习惯的 Api 文档生成工具.最大程度地利用 Java 的语法特性,你只管用心设计好接口,添加必要的注释,JApiDocs 会帮你导出一份漂亮的 ...

  7. Git之深入解析如何使用Git调试项目源码中的问题

    一.前言 了解了管理或者维护 Git 仓库.实现代码控制所需的大多数日常命令和工作流程,尝试跟了踪和提交文件的基本操作,并且掌握了暂存区和轻量级地分支及合并的威力.如果想进一步对 Git 深入学习,可 ...

  8. 什么是php的ast结构,什么是AST?Vue源码中AST语法树的解析

    这篇文章给大家介绍的内容是关于什么是AST?Vue源码中AST语法树的解析,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 什么是AST AST是指抽象语法树(abstract syn ...

  9. html5游戏开发 网页版-捕鱼达人游戏源码下载

    html5游戏开发 网页版-捕鱼达人游戏源码下载 来玩一把! 转载于:https://www.cnblogs.com/jsfoot/p/3215371.html

最新文章

  1. 华为深度学习新模型DeepShift:移位和求反代替乘法,成本大降
  2. 推荐TensorFlow2.0的样例代码下载
  3. 使用Myelipse逆向生成类图的步骤
  4. Python(60)_闭包
  5. SharePoint 2010 Crawl Component Stuck in “Recovering” status
  6. Java实现创建二维码操作
  7. php 获取顶级域名、一级域名
  8. 使用DPM2007来保护企业数据
  9. 话单分析 之 含小数保留9位
  10. Android源码在线查看工具
  11. delphi 剪切板变量_delphi clipbrd剪贴板的读写和清除功能
  12. 苹果旧版app_苹果手机教你安装旧版app
  13. 国际贸易术语解释通则(DDU 未完税交货(……指定目的港))
  14. linux 终端 reboot,讲解Linux基础命令之:man、reboot
  15. Android应用内安装apk包
  16. python str转bool方法
  17. Jackknife,Bootstraping, bagging, boosting, AdaBoosting, Rand forest 和 gradient boosting的简单介绍
  18. 数字硅麦数据的处理(傅里叶FFT)
  19. Google Chrome浏览器调整分辨率的插件
  20. 调取大华SDK获取IPC音视频流并得到H264帧

热门文章

  1. redis之 centos 6.7 下安装 redis-3.2.5
  2. maven打包记录1
  3. apache ab test使用 单独安装ab和htpasswd
  4. Hive的Security配置
  5. Thrift抛直接内存OOM一点解决思路
  6. WEB登录H3C模拟器
  7. 比特币挖矿——区块链技术
  8. 区块链有哪些技术特征
  9. firebase 发生消息_如何在命令行提示符下显示当前的Firebase项目名称,以防止发生危险错误...
  10. cifs------网络文件系统(1)