CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

正则表达式问题,高手进来

楼主goldchocobo(陆行鸟)2004-08-02 22:53:09 在 .NET技术 / C# 提问

问题是这样的,正则表达式的目的是为了将特定网页中成堆的链接提取出来,比如SITE。BAIDU。COM中的导航部分。判定的条件是连续超过6个超级链接之间只有空格等非字符就算是满足条件。  
   
  我写的是(<a(.|\n)+?>(.|\n)+?</a>\s*){6,}  
  但实际使用效果却不对  
   
  不知道哪里有问题,请高手指点 问题点数:100、回复次数:16Top

1 楼neilwang(无)回复于 2004-08-02 23:31:19 得分 0

没看出来有什么错误,帮不了你Top

2 楼zhpsam109(JACKY.昊昊)回复于 2004-08-02 23:37:21 得分 0

判定的条件是连续超过6个超级链接之间只有空格等非字符就算是满足条件?不明白!Top

3 楼goldchocobo(陆行鸟)回复于 2004-08-02 23:40:52 得分 0

比如site.baidu.com  
  将  
  ————————————  
  美女   音乐   游戏   小说   图片   电影   动漫   幽默笑话   FLASH   论坛   旅游   时尚   桌面   体育   星座   交友   聊天   BT下载  
  两性   人体艺术    
  ————————————  
  作为第一部分提出来  
  ————————————  
  黑客   硬件   邮箱   软件下载   杀毒   教程   编程   QQ工具    
  军事   主页   新闻   网站导航  
  百强网站   搜索引擎    
  ————————————  
  作为第二部分提出来,他们之间的间隔都只有空格  
   
  判定就是类似于<a   href="list/7mingxin.htm">美女</a></span>   <a   href="list/1yinyue.htm"><span   class="p140">音乐</span></a>   <span   class="p140"><a   href="list/2youxi.htm">游戏</a>   <a   href="list/46xiaoshuo.htm">小说</a>   <a   href="list/76tupian.htm">图片</a>   <a   href="list/3yingshi.htm">电影</a>   <a   href="list/8dongman.htm">动漫</a>   <a   href="list/9xiaohua.htm">幽默笑话</a>   <a   href="list/10flash.htm">FLASH</a>   <a   href="list/13luntan.htm">论坛</a>   <a   href="list/11lvyou.htm">旅游</a>   <a   href="list/68shishang.htm">时尚</a>   <a   href="list/14bizhi.htm">桌面</a>   <a   href="list/15tiyu.htm">体育</a>   <a   href="list/70xingzhuo.htm">星座</a>   <a   href="list/5jiaoyou.htm">交友</a>   <a   href="list/4liaotianshi.htm">聊天</a>   <a   href="list/34liangxing.htm"></a>  
   
  问题就是如何将其通过正则表达式抽~出来Top

4 楼kenter3(KeNtEr)回复于 2004-08-02 23:47:09 得分 0

upTop

5 楼saucer(思归)回复于 2004-08-03 01:14:06 得分 100

try   the   following  
   
  String     s=   "....the   string   from   the   website........";  
   
  Regex   re   =   new   Regex(@"<p><b>(?<title>[^<]+)</b><br>(\s|\S)*?(\s*<a[^>]+href=(""(?<href>[^""]+)""|'(?<href>[^']+)'|(?<href>\S+))[^>]*>\s*(<[^>]+>)?(?<text>[^<]+)(<[^>]+>)?\s*</a>(\s|\S)*?)+</p>",   RegexOptions.IgnoreCase);  
  foreach   (Match   m   in   re.Matches(s))  
  {  
  Console.WriteLine(m.Groups["title"].Value);  
  for   (int   i=0;   i   <   m.Groups["text"].Captures.Count;   i++)  
  Console.WriteLine("{0}={1}",m.Groups["text"].Captures[i].Value,   m.Groups["href"].Captures[i].Value);  
  }Top

6 楼saucer(思归)回复于 2004-08-03 02:25:20 得分 0

the   above   regex   might   not   work   properly,   that   site   is   weird,   they   have   this  
   
          <span   class="p140"><a   href="list/7mingxin.htm">美女</a></span>  
   
   
  <a   href="list/1yinyue.htm"><span   class="p140">音乐</span></a>  
   
  <u><font   color="#261cdc"><a   href="list/20biancheng.htm">编程</a></font></u>  
   
  <a   href="list/78bingdu.htm"><u><font   color="#261cdc"></font></u></a>  
   
  and   even   this  
   
    <a   href="list/34liangxing.htm"></a>  
   
  and  
   
  <a   href="list/71xinwen.htm"><br>  
                                  </a>  
   
  but   try  
   
   
  Regex   re   =   new   Regex(@"<p>\s*<b>(?<title>[^<]+)</b><br>(\s|\S)*?(\s*<a[^>]+href=(""(?<href>[^""]+)""|'(?<href>[^']+)'|(?<href>\S+?))[^>]*>\s*(<[^>]+>\s*)*(?<text>[^<]*?)(\s*<[^>]+>)*\s*</a>(\s|\S)*?)+</p>",   RegexOptions.IgnoreCase);  
  Top

7 楼daou101(海天一鸥)回复于 2004-08-03 08:19:13 得分 0

这个问题好像解决过了,   saucer(思归/MVP)   的方法当然可行,介绍另外一种方法:  
   
  >([^>]*)</  
   
  取出Mach.Group(1)即得到文本,所有匹配的文本就是你最后得到的。  
   
  请看帖子:  
  http://community.csdn.net/Expert/topic/3220/3220213.xml?temp=.1998865  
   
  Top

8 楼lhj1976(BlueSky Workroom)回复于 2004-08-03 11:53:37 得分 0

我头都看晕了。:)Top

9 楼goldchocobo(陆行鸟)回复于 2004-08-03 19:28:53 得分 0

汗……都没看懂我的意思……  
  也没人仔细看我写的正则表达式试图做到的目标……  
  (<a(.|\n)+?>(.|\n)+?</a>\s*){6,}  
  前面的<a(.|\n)+?>(.|\n)+?</a>是取得链接,中间的\s*是说明链接之间是有0个或多个空白字符,如换行等,       最后的{6,}是关键,也就是要只有连续有6个或6个以上的串联超链才是我要取得的对象……  
   
  其最终目的是要取得我实现格式化之后(仅保留<a><title>等标签和正文文字)的“链接群”,或者说白了就是取得一张网页的导航栏部分的链接。  
   
  没人对HTML以及网页布局结构有研究?Top

10 楼saucer(思归)回复于 2004-08-03 21:12:05 得分 0

their   html   is   a   little   weird,   your   approach   is   a   little   too   simplistic  
   
  screen   scraping   is   difficult,   not   only   it   involves   trial   and   error,   also,   if   they   change   something,   your   code   will   not   work  
   
  here   are   some   suggestions:   run   through   the   html   a   few   times,   first,   try   to   remove   all   tags   like   <span>,<font>,   then   do   your   matchTop

11 楼ClampHammer(Reading,thinking and coding)回复于 2004-08-04 09:22:13 得分 0

关注,我对web信息检索和分类也很感兴趣。Top

12 楼hivak47(比尔)回复于 2004-08-04 10:42:08 得分 0

向saucer(思归/MVP)   及各位大侠学习.Top

13 楼goldchocobo(陆行鸟)回复于 2004-08-04 20:53:00 得分 0

请不要发表可能给我们带来伤害的言论,谢谢配合  
   
  CSDN搞什么搞!怒了!!写了一堆东西发不了!!!!  
   
  请各位仔细看我写的,我说过我是格式化后再处理的……  
   
  接下去不能回本贴了,三回贴限制……继续关注……一旦有结果或者我自己解决了,就到这里结贴,散分。但可能没答案了,到时候万一没有正确答案但我结贴了,需要答案的给我留言,IF我上线,会将我正确的答案回复  
  Top

14 楼saucer(思归)回复于 2004-08-04 21:08:49 得分 0

show   your   格式化后的   html   textTop

15 楼goldchocobo(陆行鸟)回复于 2004-08-05 07:46:45 得分 0

已经解决.....Top

16 楼goldchocobo(陆行鸟)回复于 2004-08-05 07:49:18 得分 0

正则表达式如下  
   
  (<a[^<>]+?>([^<]|<img[^<]+?>)*</a>(\s| )*){6,}  
  注意其中一个空格是"0xA1"  
   
  结贴了,结贴了Top

相关问题

  • 正则表达式
  • 正则表达式
  • 正则表达式?
  • 正则表达式[/.-]
  • 【正则表达式!!!!!!!!】
  • 正则表达式
  • 正则表达式
  • 正则表达式
  • 正则表达式?
  • 正则表达式

关键词

  • 格式化
  • 正则表达式
  • 字符
  • 网页
  • html
  • 答案
  • 结贴
  • 取得
  • 空格
  • 链接

得分解答快速导航

  • 帖主:goldchocobo
  • saucer

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo