求助孟子、思归、愚翁、小山、LoveCherry、005,等高手帮忙啊。字符串处理问题!
原字符串:
<td><p align='left'>[土肥技术]
<a target='_blank' href="http://www.baidu.com">百度</a>
</p>
</td>
事例:
<a target='_blank' href="http://www.baidu.com?id='1111'">百度</a>
<a target='_blank' href='http://www.baidu.com' font=8>百度</a>
<a target='_blank' href=http://www.baidu.com>百度</a>
要的结果:
string[] temp=new string[4];
temp[0]=href=" 或 temp[0]=href=' 或 temp[0]=href=
temp[1]=" 或 temp[1]=' 或 temp[1]=> 或 temp[1]=空
temp[2]=> 或 temp[2]=空
temp[3]=</a>
1.要获取http://www.baidu.com前面部分字符href="和后一位字符;
2.如果temp[1]的值为“>”号的时候, temp[2]的值为空,否则取前一位字符;
注:如果原字符串里的 <a 、href=、</a>是小写的 我最后得到的值也应该是小写的。大写就得大写的
不知道我这么说大家能不能理解。有什么不清楚的可以随时问我。急等。。。
问题点数:100、回复次数:39Top
1 楼angel_xy(小苑)回复于 2006-09-14 18:59:48 得分 10
学习!Top
2 楼successsuccess()回复于 2006-09-14 19:04:20 得分 0
会的不会的都来看看啊...........Top
3 楼bejon(阿牛[如果我懂,必坦诚相告;如果您懂,请不吝赐教。])回复于 2006-09-14 19:15:46 得分 5
看来很简单,只是不知道楼主在讲什么
获取字符可以用substringTop
4 楼NoThatNo(不喜欢男人)回复于 2006-09-14 19:21:18 得分 5
不明白,再讲清楚些Top
5 楼dsclub(任搏软)回复于 2006-09-14 19:29:42 得分 5
是想替换href里面的内容吧?
使用正则表达式吧,相关的信息可以学习一下MSDNTop
6 楼successsuccess()回复于 2006-09-14 19:32:28 得分 0
1.要获取http://www.baidu.com前面部分字符href="和后一位字符;
2.如果temp[1]的值为“>”号的时候, temp[2]的值为空,否则取前一位字符;Top
7 楼successsuccess()回复于 2006-09-14 20:35:27 得分 0
顶啊。~~~~~孟子快来啊.........Top
8 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2006-09-14 20:55:58 得分 5
直接说出原始需求,是不是要获取链接中的HREF?Top
9 楼Small__Wolf(CSDN眞J⒏縞笑^_^.這嚒點嘚框框譲偶冩紒紹(︶︵︶))回复于 2006-09-14 20:59:39 得分 5
<a target='_blank' href="http://www.baidu.com?id='1111'">百度</a>
要截取http://www.baidu.com?id='1111'字符之前的 href=" 一和http://www.baidu.com?id='1111' 之后的那一个字符
和"百度"直接的一个字符,之后的</a>Top
10 楼Small__Wolf(CSDN眞J⒏縞笑^_^.這嚒點嘚框框譲偶冩紒紹(︶︵︶))回复于 2006-09-14 21:00:16 得分 5
不知道有没有理解错 ,是这个意思吗?????Top
11 楼successsuccess()回复于 2006-09-14 21:13:50 得分 0
1、<a target='_blank' href="http://www.baidu.com?id='1111'">百度</a>
2、<a target='_blank' href='http://www.baidu.com' font=8>百度</a>
3、<a target='_blank' href=http://www.baidu.com >百度</a>
4、<a target='_blank' href=http://www.baidu.com>百度</a>
是的,基本上就是楼上所说的那个意思。
四种情况;
第一种我要得到的4个字符分别是:href="、"、>、</a>
第二种我要得到的4个字符分别是:href='、'、>、</a>
第三种我要得到的4个字符分别是:href=、空、>、</a>
第四种我要得到的4个字符分别是:href=、>、空、</a>
Top
12 楼zpengenpz(鹏鹏)回复于 2006-09-14 21:27:33 得分 5
upTop
13 楼www_123du_com(鼠·神·泪)回复于 2006-09-14 21:51:48 得分 5
如果想要href的值就用如下正则表达式:
(?<=<a [^>]*?href=(?<sign>["']?))[^>'"]+(?=\k<sign>[^>]*>[^<]*</a>)
//和你列出的第一个不匹配,个人觉得url中不包含'
另外,我即不叫孟子,也不叫思归,又不叫愚翁,还不叫小山,而且不叫LoveCherry,还有不叫005,同时还不叫等,我叫 ---- 鼠·神·泪。Top
14 楼www_123du_com(鼠·神·泪)回复于 2006-09-14 21:56:40 得分 5
如果想得到“百度”这两个字更简单:
(?<=<a [^>]+>)[^<]+(?=</a>)
//记得指定IgnoreCase选项Top
15 楼amingo(Atlas 新技术讨论群:6455130(群主))回复于 2006-09-14 22:12:00 得分 5
帮LZ顶Top
16 楼cat_hsfz(我的新Blog在http://cathsfz.cnblogs.com)回复于 2006-09-15 00:29:37 得分 5
你是想要正则表达式匹配吧?你先说一下输入字符串可能会怎样,你要匹配其中的哪段。Top
17 楼Csharp110(~泰山~)回复于 2006-09-15 08:19:24 得分 5
upTop
18 楼job_2006(初学.net)回复于 2006-09-15 08:57:31 得分 5
顶Top
19 楼bonnie168(虚拟过客.net)回复于 2006-09-15 09:10:11 得分 5
支持 鼠·神·泪Top
20 楼hanguoji84(北飘)回复于 2006-09-15 09:13:09 得分 5
我想搂主这个帖子的主题不太好,虽然他们都很强,不过有些时候别人也是可以帮助你的,那几位大哥没空看:鼠·神·泪 来帮你了吧?不过你以后提问题不要点名了。Top
21 楼successsuccess()回复于 2006-09-15 09:13:57 得分 0
to:www_123du_com(鼠·神·泪)
我即不想要得到href的值也不向得到想“百度”这两个字。
to:cat_hsfz(我的Blog在http://purl.oclc.org/NET/cathsfz)
字符串可能的格式
1、<a target='_blank' href="http://www.baidu.com?id='1111'">百度</a>
2、<a target='_blank' href='http://www.baidu.com' font=8>百度</a>
3、<a target='_blank' href=http://www.baidu.com >百度</a>
4、<a target='_blank' href=http://www.baidu.com>百度</a>
我要获得4段值
1.要获得从href的h开始到http的h结束,这个http的h不包含在内.
2,要获得http://www.baidu.com这一点值com后一位的那个字符.
3.要获得“百度”之前的“>”这个字符
4.要获得</a>
Top
22 楼fellowcheng(鹰击长空)回复于 2006-09-15 09:14:51 得分 5
没听明白Top
23 楼petshop4(世界上有10种人,一种懂得什么是二进制 ,一种不懂)回复于 2006-09-15 09:25:55 得分 5
<a target='_blank' href=(["|'| ]?)http://www.baidu.com(.?).*?(>)百度(</a>)
∮∮∮∮匹配1∮∮∮∮
组0:<a target='_blank' href="http://www.baidu.com?id='1111'">百度</a>
*******************
组1:"
*******************
组2:?
*******************
组3:>
*******************
组4:</a>
*******************
∮∮∮∮匹配2∮∮∮∮
组0:<a target='_blank' href='http://www.baidu.com' font=8>百度</a>
*******************
组1:'
*******************
组2:'
*******************
组3:>
*******************
组4:</a>
*******************
∮∮∮∮匹配3∮∮∮∮
组0:<a target='_blank' href=http://www.baidu.com >百度</a>
*******************
组1:
*******************
组2:
*******************
组3:>
*******************
组4:</a>
*******************
∮∮∮∮匹配4∮∮∮∮
组0:<a target='_blank' href=http://www.baidu.com>百度</a>
*******************
组1:
*******************
组2:
*******************
组3:>
*******************
组4:</a>
*******************
Top
24 楼petshop4(世界上有10种人,一种懂得什么是二进制 ,一种不懂)回复于 2006-09-15 09:29:24 得分 5
楼主的表达能力有待加强
(PS 这种这问题不用叫那些大大来吧)Top
25 楼successsuccess()回复于 2006-09-15 09:32:22 得分 0
结贴了....Top
26 楼www_123du_com(鼠·神·泪)回复于 2006-09-15 09:39:14 得分 0
......Top
27 楼successsuccess()回复于 2006-09-15 09:41:26 得分 0
www_123du_com(鼠·神·泪)
有问题吗?
Top
28 楼test33(隐姓埋名)回复于 2006-09-15 09:44:33 得分 0
先顶起哇`
期待高手来。。。
Top
29 楼successsuccess()回复于 2006-09-15 09:49:57 得分 0
谢谢test33()
不过已经结贴了,高手都取打泡去了Top
30 楼www_123du_com(鼠·神·泪)回复于 2006-09-15 11:34:54 得分 0
//using System.Text.RegularExpressions;
string[] temp = new string[4];
Regex r = new Regex("<a [^>]*?(?<a1>href=(?<t1>[\"']?))[^>]+\\k<t1>(?<t2>[^>]*)>[^<]*(?<a4></a>)",RegexOptions.IgnoreCase);
Match m = r.Match("<a target='_blank' href=http://www.baidu.com>百度</a>");
temp[0] = m.Groups["a1"].Value;
string t1 = m.Groups["t1"].Value;
if (t1 == "")
{
if (m.Groups["t2"].Value != "")
{
temp[1] = "";
}
else
{
temp[1] = ">";
}
}
else
{
temp[1] = t1;
}
if (temp[1] == ">")
{
temp[2] = "";
}
else
{
temp[2] = ">";
}
temp[3] = m.Groups["a4"].Value;Top
31 楼liuxiaoyi666(MSMVP 小猪妹荣誉马甲之八卦兔子)回复于 2006-09-15 11:36:28 得分 0
............Top
32 楼successsuccess()回复于 2006-09-15 13:13:47 得分 0
www_123du_com(鼠·神·泪)
你的方法可以做到,但这种情况就有点问题了
"<a target='_blank' href=http://www.baidu.com font=8>百度</a>
取出来后的值分别是: href= > 空 </a>
我要的是: href= 空 > </a>
第2个值要取http://www.baidu.com后一位的那个字符.该怎么改造一下.Top
33 楼www_123du_com(鼠·神·泪)回复于 2006-09-15 14:24:08 得分 0
那也就是说string[2]不管在什么情况下都是>,是吧?
跟你以前说的不同,我是根据你上面写的需求写的代码。
如果是这样那就改成:
string[] temp = new string[4];
Regex r = new Regex("<a [^>]*?(?<a1>href=(?<t1>[\"']?))[^>]+\\k<t1>(?<t2>[^>]*)>[^<]*(?<a4></a>)",RegexOptions.IgnoreCase);
Match m = r.Match("<a target='_blank' href=http://www.baidu.com>百度</a>");
temp[0] = m.Groups["a1"].Value;
temp[1] = m.Groups["t1"].Value;;
temp[2] = ">";
temp[3] = m.Groups["a4"].Value;Top
34 楼successsuccess()回复于 2006-09-15 14:34:26 得分 0
不是的,以前的那些情况还是不变
现在就是加一种情况
"<a target='_blank' href=http://www.baidu.com font=8>百度</a>
当http://www.baidu.com有空格的时候就取这个空格,如果没有的时候就取后面的那个>号
这种情况取出来的值是: href= 空 > </a>
Top
35 楼www_123du_com(鼠·神·泪)回复于 2006-09-15 15:31:45 得分 0
string[] temp = new string[4];
Regex r = new Regex("<a [^>]*?(?<a1>href=(?<t1>[\"']?))[^> ]+\\k<t1>(?<t2>[^>]*)>[^<]*(?<a4></a>)",RegexOptions.IgnoreCase);
Match m = r.Match("<a target='_blank' href=http://www.baidu.com abc>百度</a>");
temp[0] = m.Groups["a1"].Value;
string t1 = m.Groups["t1"].Value;
if (t1 == "")
{
if (m.Groups["t2"].Value != "")
{
temp[1] = "";
}
else
{
temp[1] = ">";
}
}
else
{
temp[1] = t1;
}
if (temp[1] == ">")
{
temp[2] = "";
}
else
{
temp[2] = ">";
}
temp[3] = m.Groups["a4"].Value;Top
36 楼successsuccess()回复于 2006-09-15 16:11:44 得分 0
OK,这下可以了。不过不知为什么当值是这段就什么都取不出来,其它的都可以.
<a href="http://www.zaza.com.cn/categories/001/200604071807419730.html" target="_blank"><font size="3">最好玩的在线小游戏网站 | zaza在线游戏 | <font color=#C60A00>测试</font>..</font></a>
Top
37 楼successsuccess()回复于 2006-09-15 16:18:02 得分 0
正如 petshop4(开始混正则了) ( ) 所说。楼主的表达能力有待加强。由于自己表述的不清楚让大家不知道我在说什么。深表歉意。
再这里感谢大家的帮助,特别感谢
www_123du_com(鼠·神·泪) ( )
耐心的解答。由于结贴太早,我现在的可用分又只有59分,我会拿新号发3贴,请www_123du_com(鼠·神·泪) 接分......到时大家勿以为是在故意倒分....
Top
38 楼www_123du_com(鼠·神·泪)回复于 2006-09-15 17:30:56 得分 0
//改为这句试试:
"<a [^>]*?(?<a1>href=(?<t1>[\"']?))[^> ]+\\k<t1>(?<t2>[^>]*)>.*?(?<a4></a>)"
对于分,我向来是不拒绝的,哈哈。Top
39 楼petshop4(世界上有10种人,一种懂得什么是二进制 ,一种不懂)回复于 2006-09-18 12:02:20 得分 0
我帮你搞定 才给我10分 汗~~Top




