我有一个.NET Regex,看起来类似于:
(?AAA)|(? BBB)
我正在对样本字符串使用Matches方法,例如"AAABBBAAA"
,然后迭代匹配.
我的目标是使用正则表达式匹配组找到匹配类型,因此对于此正则表达式,它将是:
类型1
类型2
类型1
我找不到任何GetGroupName
方法.请帮忙.
这是你正在寻找的那种东西吗?它使用,Regex.GroupNameFromNumber
所以你不需要知道正则表达式本身之外的组名.
using System; using System.Text.RegularExpressions; class Test { static void Main() { Regex regex = new Regex("(?AAA)|(? BBB)"); foreach (Match match in regex.Matches("AAABBBAAA")) { Console.WriteLine("Next match:"); GroupCollection collection = match.Groups; // Note that group 0 is always the whole match for (int i = 1; i < collection.Count; i++) { Group group = collection[i]; string name = regex.GroupNameFromNumber(i); Console.WriteLine("{0}: {1} {2}", name, group.Success, group.Value); } } } }
如果要检索特定组名,可以使用该方法.Regex
.
GroupNameFromNumber
//regular expression with a named group Regex regex = new Regex(@"(?AAA)|(? BBB)", RegexOptions.Compiled); //evaluate results of Regex and for each match foreach (Match m in regex.Matches("AAABBBAAA")) { //loop through all the groups in current match for(int x = 1; x < m.Groups.Count; x ++) { //print the names wherever there is a succesful match if(m.Group[x].Success) Console.WriteLine(regex.GroupNameFromNumber(x)); } }
另外,还有一个字符串索引器GroupCollection
.在属性上可访问的对象,这允许您按名称而不是索引访问匹配中的组.Match
.
Groups
//regular expression with a named group Regex regex = new Regex(@"(?AAA)|(? BBB)", RegexOptions.Compiled); //evaluate results of Regex and for each match foreach (Match m in regex.Matches("AAABBBAAA")) { //print the value of the named group if(m.Groups["Type1"].Success) Console.WriteLine(m.Groups["Type1"].Value); if(m.Groups["Type2"].Success) Console.WriteLine(m.Groups["Type2"].Value); }