by baidu:
public static string ShowUrls(string text)
    {
                Regex linkRegex = new Regex(" href\\s*=\\s*(?:(?:\\\"(?<url>[^\\\"]*)\\\")|(?<url>[^\\s]* ))",
            RegexOptions.IgnoreCase | RegexOptions.Compiled);
        
        MatchCollection linkMatchs = linkRegex.Matches(text);
        
        string pattern = @"(http|ftp|https):\/\/[\w]+(.[\w]+)([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])";
        MatchCollection matchs;
        string clearText = Regex.Replace(text, "<[^>]*>",string.Empty, RegexOptions.Compiled);//清除html标记
        matchs = Regex.Matches(clearText, pattern, RegexOptions.IgnoreCase | RegexOptions.Compiled);
        bool flag = true;
        foreach (Match m in matchs)
        {
            string link = "<a href=\"" + m.ToString() + "\" target=\"_new\">" + m.ToString() + "</a>";
            if (linkMatchs.Count > 0)
            {
                foreach (Match linkMatch in linkMatchs)
                {
                    if (linkMatch.Value.IndexOf(m.Value) > -1)
                    {
                        flag = false;
                        break;
                    }
                }
            }            
            if(flag)
            {
                text = text.Replace(m.ToString(), link);
            }
            
        }
        return text;
}
可以用下面正则来匹配
using System; 
using System.Text.RegularExpressions; 
public class GeneralValidation 
{ 
    public static bool IsEmail(string Email) 
    { 
        string strRegex = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" + 
            @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" + 
            @".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$"; 
        Regex re = new Regex(strRegex); 
        if (re.IsMatch(Email)) 
            return (true); 
        else 
            return (false); 
    } 
    public static bool IsUrl(string Url) 
    { 
        string strRegex = "^(https?://)" 
        + "?(([0-9a-z_!~*'().&=+$%-]+: )?[0-9a-z_!~*'().&=+$%-]+@)?" //user@ 
        + @"(([0-9]{1,3}\.){3}[0-9]{1,3}" // IP- 199.194.52.184 
        + "|" // allows either IP or domain 
        + @"([0-9a-z_!~*'()-]+\.)*" // tertiary domain(s)- www. 
        + @"([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\." // second level domain 
        + "[a-z]{2,6})" // first level domain- .com or .museum 
        + "(:[0-9]{1,4})?" // port number- :80 
        + "((/?)|" // a slash isn't required if there is no file name 
        + "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$"; 
        Regex re = new Regex(strRegex); 
        if (re.IsMatch(Url)) 
            return (true); 
        else 
            return (false); 
    } 
}