我有短信或文字。
我们的要求是从文本中获取链接。我们正在使用以下代码
List<string> list = new List<string>();
Regex urlRx = new
Regex(@"(?<url>(http:|https:[/][/]|www.)([a-z]|[A-Z]|[0-9]|[/.]|[~])*)",
RegexOptions.IgnoreCase);
MatchCollection matches = urlRx.Matches(message);
foreach (Match match in matches)
{
list.Add(match.Value);
}
return list;
它提供了网址但不是完整的网址。代码的输出是
但我们需要像
这样的完整网址请建议如何解决该问题。谢谢。
答案 0 :(得分:15)
试试这个正则表达式,同时返回查询字符串
(http|ftp|https)://([\w+?\.\w+])+([a-zA-Z0-9\~\!\@\#\$\%\^\&\*\(\)_\-\=\+\\\/\?\.\:\;\'\,]*)?
您可以在gskinner
上进行测试答案 1 :(得分:8)
public List<string> GetLinks(string message)
{
List<string> list = new List<string>();
Regex urlRx = new Regex(@"((https?|ftp|file)\://|www.)[A-Za-z0-9\.\-]+(/[A-Za-z0-9\?\&\=;\+!'\(\)\*\-\._~%]*)*", RegexOptions.IgnoreCase);
MatchCollection matches = urlRx.Matches(message);
foreach (Match match in matches)
{
list.Add(match.Value);
}
return list;
}
var list = GetLinks("Hey yo check this: http://www.google.com/?q=stackoverflow and this: http://www.mysite.com/?id=10&author=me");
它会找到以下类型的链接:
http:// ...
https:// ...
file:// ...
www. ...
答案 2 :(得分:1)
如果您稍后在代码中使用此网址(提取部分,查询字符串等),请考虑使用
Uri
课程与HttpUtility
助手合并。
Uri uri;
String strUrl = "http://www.test.com/test.aspx?id=53";
bool isUri = Uri.TryCreate(strUrl, UriKind.RelativeOrAbsolute, out uri);
if(isUri){
Console.WriteLine(uri.PathAndQuery.ToString());
}else{
Console.WriteLine("invalid");
}
它可以帮助您完成此操作。