黑马程序员技术交流社区

标题: 求大神给看一个正则表达式 [打印本页]

作者: dugubaitian    时间: 2014-7-6 17:44
标题: 求大神给看一个正则表达式
本帖最后由 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();


作者: 向晓伟    时间: 2014-7-6 21:22
感觉正则表达式略显复杂啊~~
作者: dugubaitian    时间: 2014-7-6 22:22
向晓伟 发表于 2014-7-6 21:22
感觉正则表达式略显复杂啊~~

嗯!  在网页中提取了  为了保证可靠性 就把整个a标签都匹配一下    就是结果出不来啊  超郁闷!!  正则学的太烂了。。
作者: _xixi_    时间: 2014-7-6 22:27
本帖最后由 _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, 下载次数: 48)

运行结果图

运行结果图

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

QQ图片20140706223122.jpg

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

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

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

作者: dugubaitian    时间: 2014-7-7 09:40
_xixi_ 发表于 2014-7-6 22:27
我从前程无忧网查了一下职位信息的html代码,格式如下:
针对这个a标签获取职位信息的正则

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

那以这个例子为例,如果加了@ ,这里面的  .   +  这些转义字符都变成了普通字符,加@能正确表达吗?
作者: dugubaitian    时间: 2014-7-7 16:29
_xixi_ 发表于 2014-7-7 10:46
那以这个例子为例,如果加了@ ,这里面的  .   +  这些转义字符都变成了普通字符,加@能正确表达吗? ...

没有 啊!!   正则表达式本来就是字符串   这些正则字符是不会转义的。。
作者: 麦田怪圈    时间: 2014-7-7 16:43
路过学习!
作者: czwanglei    时间: 2014-7-14 18:09
mc.Count是不变的,变的是mc.Groups.Count
作者: 黄花菜    时间: 2014-10-28 08:28
感觉正则表达式略显复杂啊~~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2