• [传智播客学习日记]正则提取网页信息并写入文件


    今天来复习赵老师讲过的旧知识!

    知识点:文件的按行读写、正则提取组。

    这次我加了详细的注释,完全就是面向过程,跟着思路一步一步走的,其实写程序就是跟着思路来,有思路,就有代码!非C#玩家应该也能看得懂。(注:C#中的using块的作用是自动释放非托管资源。)

    这段演示代码的用途是把大街网上的求职信息的单位名称和链接地址按照一定格式提取到一个文本文件里。假设页面是“1.htm”、输出为“1.txt”(实际应用中不会写死的),效果是编号-名称-地址-换行,如下:

    7.名称:某某某公司招聘某某某职位
    地址:http://job.dajie.com/xxxxx.html


    代码:

     1 //首先要读取文件,建立一个文件流来读取
    2 using (FileStream fs = File.OpenRead("1.htm"))
    3 {
    4 //由于一个标签就是一行,所以用StreamReader来按行读取
    5 using (StreamReader sr = new StreamReader(fs))
    6 {
    7 //我们要收集所有信息到一个集合里,建立一个集合
    8 List<string> lines = new List<string>();
    9
    10 //这里是正则匹配的字符串,第一个组是连接,第二个组是名称,这个字符串是匹配大街网的
    11 string reg = "[^<p>]<a href=\"(.*)\" onmousedown=\"return c.*\">(.*)</a>";
    12
    13 //看读没读到文件结尾,读取每一行
    14 while (!sr.EndOfStream)
    15 {
    16 //读取下一行
    17 string line = sr.ReadLine();
    18
    19 //如果匹配成功
    20 if (Regex.IsMatch(line, reg))
    21 {
    22 //则收集匹配到的信息到Match变量中
    23 Match match = Regex.Match(line, reg);
    24 //拼接结果字符串
    25 string result = string.Format("名称:{0}\r\n地址:{1}", match.Groups[2], match.Groups[1]);
    26 //把结果加入到最终的集合里
    27 lines.Add(result);
    28 }
    29 }//读取每一行,循环结束
    30
    31 //读完了之后要写入目标文件,先建立一个
    32 using (FileStream fs2 = File.Create("1.txt"))
    33 {
    34 //由于是按行写的,所以使用StreamWriter
    35 using (StreamWriter sw = new StreamWriter(fs2))
    36 {
    37 //循环集合里的每一行
    38 for (int i=0; i<lines.Count; i++)
    39 {
    40 //加上标号和换行,写进目标文件
    41 sw.WriteLine((i+1)+"."+lines[i]+"\r\n");
    42 }
    43 }
    44 }
    45 }
    46 }



  • 相关阅读:
    【限时领奖】消息队列 MNS 训练营重磅来袭,边学习充电,边领充电宝~
    从函数计算到 Serverless 架构
    微服务治理热门技术揭秘:无损上线
    合作再升级!云原生加速器成员企业云霁科技获得阿里云产品生态集成认证
    开源小白到核心开发——我与 sealer 的成长故事
    【有奖评测局】阿里云容器镜像 ACR 测评团限时招募中!
    MSE 费芮新金融行业标杆案例
    NBU异构还原Oracle完整备份的一些总结
    Symantec NetBackup 8.1安装部署
    NFS高可用(NFS+keepalive+Sersync)
  • 原文地址:https://www.cnblogs.com/Elijah/p/2260788.html
Copyright © 2020-2023  润新知