C#.net正则表达式提取网页URL问题
现在利用C#写了一个程序,可以获取网页的源码。但是现在还面临一个问题,就是怎么样快速有效的提取一个网页的源码中所有的<ahref="URL"/></a>这样的标记中,所有...
现在利用C#写了一个程序,可以获取网页的源码。但是现在还面临一个问题,就是怎么样快速有效的提取一个网页的源码中所有的<a href="URL"/></a>这样的标记中,所有的URL。
我自己写了一个,效率比较低。想问一下各位有什么好的方法没有。
最好是能用一个效率比较高的方法或者什么能一下子提取出所有的URL
有没有解决方案
我知道正则表达式怎么写。重要是代码怎么实现的部分~在c#中怎么来实现这样的结果~效率高点的方法,一次取出或者循环取出~
给个代码示例吧~ 展开
我自己写了一个,效率比较低。想问一下各位有什么好的方法没有。
最好是能用一个效率比较高的方法或者什么能一下子提取出所有的URL
有没有解决方案
我知道正则表达式怎么写。重要是代码怎么实现的部分~在c#中怎么来实现这样的结果~效率高点的方法,一次取出或者循环取出~
给个代码示例吧~ 展开
展开全部
正则可以提取所有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的值
按此类推...
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("(?)")
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
/// <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 "";
}
}
思路大概这样吧,具体的根据具体来改。。
/// 获取符合条件的第一笔数据
/// </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 "";
}
}
思路大概这样吧,具体的根据具体来改。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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();
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
性能最高的,肯定是 IndexOf("<a "),然后得到位置后在这个位置之后检索 IndexOf("href=") 然后在用 SubString 取之后的引号内的内容。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
<a.+?href="(?<url>.+?)".+?></a>
提取分组 url
提取分组 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)这个概念就行了 。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询