正则表达式应用
替换时引用匹配到的值 $1表示第1个小括号的内容,$2表示第2个小括号的内容
Regex.Replace(str, @"((([a-z]|[A-Z])+))", " $1 ")
根据分组下标取值(match.Groups[0]是整个正则匹配到的值,之后按照分组左括号顺序)
var matchs1 = Regex.Matches(text, @"\b((\S+)://(\S+))\b");
foreach (Match match in matchs1)
{
Console.WriteLine(string.Format("网址:{0} 网址:{1} 协议:{2} 域名:{3}", match.Value, match.Groups[1], match.Groups[2], match.Groups[3]));
//match.Groups[0]和match.Value的结果一样
Console.WriteLine(string.Format("网址:{0} 网址:{1} 协议:{2} 域名:{3}", match.Groups[0], match.Groups[1], match.Groups[2], match.Groups[3]));
}
根据分组名取值
var matchs2 = Regex.Matches(text, @"\b(?<protocol>\S+)://(?<address>\S+)\b");
foreach (Match match in matchs2)
{
Console.WriteLine(string.Format("网址:{0} 协议:{1} 域名:{2}", match.Value, match.Groups["protocol"], match.Groups["address"]));
}
测试:获取超链接中的链接和文本
string s = "111<a href=\"http://www.baidu.com\">百度</a>222";
var match = Regex.Match(s, "<a[^>]+href=\"(?<href>[^\"]*)\">(?<text>[\\s\\S]*)</a>");
Console.WriteLine(match.Groups[0].Value);
Console.WriteLine(match.Groups[1].Value);
Console.WriteLine(match.Groups[2].Value);
Console.WriteLine();
Console.WriteLine(match.Value);
Console.WriteLine(match.Groups["href"].Value);
Console.WriteLine(match.Groups["text"].Value);