Match类:http://msdn.microsoft.com/zh-cn/library/system.text.regularexpressions.match(v=vs.110).aspx
Groups属性:获取由正则表达式匹配的组的集合。属性值为GroupCollection类型。
我们知道,正则表达式分组中,是以"()"进行分组的,编号为0的组表示整个表达式匹配的内容
例子1:
string s = "百位邻期";
string regx = "(.*)";
Match match = Regex.Match(s, regx);
Console.WriteLine(match.Groups[0].Value);
Console.WriteLine(match.Groups[1].Value);
Console.ReadKey();上面Groups[0]和Groups[1]输出结果均为:百位邻期例子2:
string s = "百位邻期";
string regx = "(.*)刘德华|(.*)";
Match match = Regex.Match(s, regx);
Console.WriteLine(match.Groups[0].Value);
Console.WriteLine(match.Groups[1].Value); //为什么是空
Console.ReadKey();
上面正则表达式,“|”左边的表达式显然是不能匹配的,只有“|”右边的表达式才匹配,可是输出的时候,为什么Groups[1]输出为空呢,和例子1不是一样的吗?请大师指教,谢谢!!!
Groups属性:获取由正则表达式匹配的组的集合。属性值为GroupCollection类型。
我们知道,正则表达式分组中,是以"()"进行分组的,编号为0的组表示整个表达式匹配的内容
例子1:
string s = "百位邻期";
string regx = "(.*)";
Match match = Regex.Match(s, regx);
Console.WriteLine(match.Groups[0].Value);
Console.WriteLine(match.Groups[1].Value);
Console.ReadKey();上面Groups[0]和Groups[1]输出结果均为:百位邻期例子2:
string s = "百位邻期";
string regx = "(.*)刘德华|(.*)";
Match match = Regex.Match(s, regx);
Console.WriteLine(match.Groups[0].Value);
Console.WriteLine(match.Groups[1].Value); //为什么是空
Console.ReadKey();
上面正则表达式,“|”左边的表达式显然是不能匹配的,只有“|”右边的表达式才匹配,可是输出的时候,为什么Groups[1]输出为空呢,和例子1不是一样的吗?请大师指教,谢谢!!!
正则基础之——捕获组(capture group) string s = "百位邻期";
Regex reg = new Regex(@"(.*)刘德华|(.*)");
Match m = reg.Match(s);
richTextBox2.Text = "捕获组数量:" + reg.GetGroupNumbers().Length + "\n";
for (int i = 0; i < reg.GetGroupNumbers().Length; i++)
{
richTextBox2.Text += "捕获组 " + i + " 捕获内容:" + m.Groups[i].Value + "\n";
}
/*-----输出-----
捕获组数量:3
捕获组 0 捕获内容:百位邻期
捕获组 1 捕获内容:
捕获组 2 捕获内容:百位邻期
*/因为匹配之前你是不知道哪个分支可以匹配成功的,所以不能认为匹配不成功的捕获组就不参与编号,我们要从正则的规则去推断结果,而不是从匹配结果来反推正则的规则
(.*)刘德华中的(.*)在匹配“百位邻期”虽然没有匹配到,但它也是参与捕获组的编号的
而在匹配“百位邻期刘德华”时,Groups[1]就可以得到匹配内容了
string s = "百位邻期刘德华";
Regex reg = new Regex(@"(.*)刘德华|(.*)");
Match m = reg.Match(s);
richTextBox2.Text = "捕获组数量:" + reg.GetGroupNumbers().Length + "\n";
for (int i = 0; i < reg.GetGroupNumbers().Length; i++)
{
richTextBox2.Text += "捕获组 " + i + " 捕获内容:" + m.Groups[i].Value + "\n";
}
/*-----输出-----
捕获组数量:3
捕获组 0 捕获内容:百位邻期刘德华
捕获组 1 捕获内容:百位邻期
捕获组 2 捕获内容:
*/
试试。