2011-02-04 78 views
1

我试图分裂基础上的群体正则表达式中的下列ID字符串:Regex.Split与团队合作时如何工作?

string id = "aBcDe-fghIj-KLmno-pQRsT-uVWxy"; 
string regex = "^([a-z]{5}-){4}([a-z]{5})$"; 

Regex idRegex = new Regex(regex, RegexOptions.IgnoreCase); 
var match = idRegex.Match(id); 
var split = idRegex.Split(id); 

split字符串数组内产生的群体是:

pQRsT- 
uVWxy 

看来,只有最后一个找到匹配正则表达式中第一个组的实例将保留在字符串数组中。

是否有可能使用Regex.Split返回此组的所有实例?

这样的字符串数组包含:

aBcDe- 
fghIj- 
KLmno- 
pQRsT- 
uVWxy 

回答

2

如果使用Regex.Match,返回的匹配对象包含组的列表,每个组都有捕获的列表。我相信组合集合中的组按照它们的左括号的位置排序,并且组的捕获按它们在输入字符串中的位置排序。

// untested code 
Match match = idRegex.Match(id); 

if(match.Success) 
{ 
    foreach (Group group in match.Groups) 
    { 
     foreach(Capture capture in group.Captures) 
     { 
      // do something with capture.Value 
     } 
    } 
} 
+0

完美的,我不知道捕获每个组的列表中存在!谢谢你的帮助。 – fletcher 2011-02-04 10:58:34

1

我认为你是混合的东西......

Split将分割字符串,即把它分成子删除您提供的模式,因此,例如,如果你在分割“ - ”:

foreach (string s in Regex.Split("aBcDe-fghIj-KLmno-pQRsT-uVWxy", "-")) { 
    Console.WriteLine(s); 
} 

你会得到信集团,没有你作为一个参数字符串分割:

aBcDe 
fghIj 
KLmno 
pQRsT 
uVWxy 

作为另一个例子,如果你用空格作为分隔符来分割一个句子,你会得到句子中的单词。

否则,要获得与信集团“ - ”末,你需要搜索匹配:

foreach (Match m in Regex.Matches("aBcDe-fghIj-KLmno-pQRsT-uVWxy", @"\w{5}-?")) { 
    Console.WriteLine(m.Value); 
}