正则表达式应用

替换时引用匹配到的值 $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);
posted @ 2019-10-12 15:11  惬意的小屋  阅读(122)  评论(0编辑  收藏  举报