正则表达式问题,高手进来
问题是这样的,正则表达式的目的是为了将特定网页中成堆的链接提取出来,比如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




