C#.net正则表达式提取网页URL问题

现在利用C#写了一个程序,可以获取网页的源码。但是现在还面临一个问题,就是怎么样快速有效的提取一个网页的源码中所有的<ahref="URL"/></a>这样的标记中,所有... 现在利用C#写了一个程序,可以获取网页的源码。但是现在还面临一个问题,就是怎么样快速有效的提取一个网页的源码中所有的<a href="URL"/></a>这样的标记中,所有的URL。
我自己写了一个,效率比较低。想问一下各位有什么好的方法没有。
最好是能用一个效率比较高的方法或者什么能一下子提取出所有的URL
有没有解决方案
我知道正则表达式怎么写。重要是代码怎么实现的部分~在c#中怎么来实现这样的结果~效率高点的方法,一次取出或者循环取出~
给个代码示例吧~
展开
 我来答
百百mp3
2013-07-10 · TA获得超过855个赞
知道小有建树答主
回答量:901
采纳率:90%
帮助的人:551万
展开全部
正则可以提取所有URL的啊。
string web_code;
MatchCollection ms = new Regex("(?<=<a href=\"URL\"/>).*?(</a>)").Matches(web_code);
//个人喜欢用预搜索,你可以改的,用Matches获取所有的URL
然后:
ms[0].Value //第一个URL的值
ms[1].Value //第二个URL的值
按此类推...
更多追问追答
追问
好像写到c#里面执行不了
我现在想用在一个div标记内所有的URL是这样的格式
text
然后我写的是
Regex("(?)")
求指教~
追答
Regex("(?)")
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
豆豆子灬
2013-07-10 · 超过24用户采纳过TA的回答
知道答主
回答量:84
采纳率:0%
帮助的人:34万
展开全部
/// <summary>
/// 获取符合条件的第一笔数据
/// </summary>
/// <param name="strInfo">需要进行查找的字符串</param>
/// <param name="stMark">开始标识</param>
/// <param name="edMark">结束标识</param>
/// <returns>开始与结束标识之间的内容</returns>
private static string GetFirstString(string strInfo, string stMark, string edMark)
{
int idx = strInfo.IndexOf(stMark);
int stLen = stMark.Length;
int len = strInfo.Length;
if (idx > -1)
{
strInfo = strInfo.Substring(idx + stLen, len - idx - stLen);
int endIdx = strInfo.IndexOf(edMark);
strInfo = strInfo.Substring(0, endIdx);
return strInfo;
}
else
{
return "";
}
}

思路大概这样吧,具体的根据具体来改。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
梦里寻你我他
2013-07-10 · TA获得超过2199个赞
知道大有可为答主
回答量:2171
采纳率:42%
帮助的人:1213万
展开全部
  Regex threg = new Regex(@"(?<=<a\s*href="")[^""]*(?="")");
            MatchCollection theMatches = threg.Matches("<a href="URL"/></a>");
            string result = "";
            foreach (Match thematch in theMatches)
            {
                if (thematch.Length!=0)
                {
                    result += thematch.Value.ToString();                    
                }

            }
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
OAngs
2013-07-10 · TA获得超过678个赞
知道小有建树答主
回答量:554
采纳率:66%
帮助的人:363万
展开全部
性能最高的,肯定是 IndexOf("<a "),然后得到位置后在这个位置之后检索 IndexOf("href=") 然后在用 SubString 取之后的引号内的内容。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
forzamilan999
2013-07-10 · TA获得超过127个赞
知道小有建树答主
回答量:189
采纳率:0%
帮助的人:91.3万
展开全部
<a.+?href="(?<url>.+?)".+?></a>
提取分组 url
更多追问追答
追问
我明白 怎么用正则表达式来写~ 重要的是 怎么在c#代码中 取出所有 URL
追答
string pattern = ".+?)\".+?>";
Regex reg = new Regex(pattern);
MatchCollection matches = reg.Matches(网页源代码);
List list = new List();
foreach(Match mat in matches)
{
string result = mat.Group["url"].Value;
list.Add(result);
}

没有在vs里写,手写的,应该是这样的。list里就是全部的url。 知道分组(Group)这个概念就行了 。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式