A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© dugubaitian 中级黑马   /  2014-7-6 17:44  /  1604 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 dugubaitian 于 2014-7-8 08:44 编辑

<a  class="jobname" target="_blank">C#开发测试工程师</a>

<a  class="jobname" target="_blank">教育业务高级JAVA开发工程师</a>

下面一段代码是从上面的html代码中摘取前程无忧网中职位信息的,但正则表达式一直写不对,,请大神给看看! 将不胜感激。
string regex = @"<a href=""http://ac.51job.com/phpAD/adtrace.php?ID=([\d+]{8})&JobID=([\d+]{8}) ""zzSearch.acStatRecJob\( 1 \);"" class=""jobname"" target=""_blank"">([^<]+)</a>";                                            //正则表达式
            WebClient wc = new WebClient();
            wc.Encoding = Encoding.UTF8;
            string address = "http://localhost/%E3%80%90%E5%8C%97%E4%BA%AC,%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%BD%AF%E4%BB%B6%E6%8B%9B%E8%81%98%EF%BC%8C%E6%B1%82%E8%81%8C%E3%80%91-%E5%89%8D%E7%A8%8B%E6%97%A0%E5%BF%A7.htm";  
            string sourse=wc.DownloadString(address);                                                               //下载网站资源
            MatchCollection mc=Regex.Matches(sourse,regex);                                                 //根据正则表达式获取匹配组
            int i = mc.Count;                                                                                                             //正则表达式不对   i的值老是0   求解??
            foreach (Match m in mc)
            {
                if(m.Success)
                {
                    Console.WriteLine(m.Groups[3].Value);
                }
            }
            Console.ReadKey();

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

9 个回复

倒序浏览
感觉正则表达式略显复杂啊~~
回复 使用道具 举报
向晓伟 发表于 2014-7-6 21:22
感觉正则表达式略显复杂啊~~

嗯!  在网页中提取了  为了保证可靠性 就把整个a标签都匹配一下    就是结果出不来啊  超郁闷!!  正则学的太烂了。。
回复 使用道具 举报
本帖最后由 _xixi_ 于 2014-7-6 22:46 编辑

我从前程无忧网查了一下职位信息的html代码,格式如下:
针对这个a标签获取职位信息的正则

(?<=exp)是获取exp后面的位置,(?=exp)是获取exp前面的位置,所以在这里 ([^<]+) 匹配到职位信息,前后两个断言都是为了匹配位置的。
  1. static void Main(string[] args)
  2.         {
  3.             //(?<=<a position' target='_blank'>)([^<]+)(?=</a>)
  4.             //C#中 除 .$ ^ { [ ( | ) * + ? \ 外,其他字符与自身匹配,将上面的正则处理后如下
  5.             //(?<=<a position' target='_blank'>)([^<]+)(?=</a>)
  6.             string regex = "(?<=<a href='http:\//ac\\u002E51job\\u002Ecom/phpAD/adtrace\\u002Ephp\\u003FID=.+class='position' target='_blank'>)([^<]+)(?=</a>)";         
  7.             WebClient wc = new WebClient();
  8.             wc.Encoding = Encoding.Default;
  9.             string address = "http://www.51job.com/";
  10.             string sourse = wc.DownloadString(address);   
  11.             MatchCollection mc = Regex.Matches(sourse, regex);
  12.             int i = mc.Count;                                         
  13.             foreach (Match m in mc)
  14.             {
  15.                 if (m.Success)
  16.                 {
  17.                     Console.WriteLine(m.ToString());
  18.                 }
  19.             }
  20.             Console.ReadKey();
  21.         }
复制代码


为了技术分不容易,看了一晚,还是有问题不明白,关于转义的问题,如果加@,正则字符串要怎么写?

QQ图片20140706221407.jpg (42.02 KB, 下载次数: 49)

运行结果图

运行结果图

QQ图片20140706223122.jpg (20.02 KB, 下载次数: 46)

QQ图片20140706223122.jpg

2.jpg (25.83 KB, 下载次数: 45)

针对这个a标签获取职位信息的正则

针对这个a标签获取职位信息的正则

评分

参与人数 1技术分 +2 收起 理由
czwanglei + 2

查看全部评分

回复 使用道具 举报 1 0
_xixi_ 发表于 2014-7-6 22:27
我从前程无忧网查了一下职位信息的html代码,格式如下:
针对这个a标签获取职位信息的正则

C#中加上@有两个作用: 一是字符串可以随便换行  例如:@“guuhugugugugugu
gugkukgkukuku”;  这样写就行的。
二是转义字符不会转义了。例如:@“d:\1.txt”;  不用写成“d:\\1.txt”;
回复 使用道具 举报
dugubaitian 发表于 2014-7-7 09:40
C#中加上@有两个作用: 一是字符串可以随便换行  例如:@“guuhugugugugugu
gugkukgkukuku”;  这样写就 ...
  1. (?<=<a position' target='_blank'>)([^<]+)(?=</a>)
复制代码

那以这个例子为例,如果加了@ ,这里面的  .   +  这些转义字符都变成了普通字符,加@能正确表达吗?

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
_xixi_ 发表于 2014-7-7 10:46
那以这个例子为例,如果加了@ ,这里面的  .   +  这些转义字符都变成了普通字符,加@能正确表达吗? ...

没有 啊!!   正则表达式本来就是字符串   这些正则字符是不会转义的。。
回复 使用道具 举报
路过学习!
回复 使用道具 举报
mc.Count是不变的,变的是mc.Groups.Count
回复 使用道具 举报
感觉正则表达式略显复杂啊~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马