当我期待3时,只获得一场比赛

时间:2012-09-13 21:01:37

标签: c# regex visual-studio-2010

在C#,VS 2010中使用正则表达式。这是代码。

static string capturePattern = @"\|([!-|]{2})([!-|]{2})([!-|]{2})?([!-|]{2})?([!-|]{2})?([!-|]{2})?([!-|]{2})?\|";

Regex rgx = new Regex(capturePattern);

string TS="!3829.87N/12033.82Wv169/000|!('d%*|"

MatchCollection matches = rgx.Matches(TS);

matches.Count结束为1,匹配[0]为“|!('d%* |”。

我期待matches.Count为3,解析后的字符串为:

matches[0] = "!("
matches[1] = "'d"
matches[2] = "%*"

我做错了什么?

2 个答案:

答案 0 :(得分:1)

你的正则表达式将条形|之间的所有内容捕获到一个匹配项中。如果您想要括号中的部分,那些部分位于match[0].Groups

Group[0]是整个捕获组。第1,2组以及可选的3个或更多个将成为括号中的字符对。

在你的情况下,matches.Count将为1,匹配[0] .Groups.Count将为4,其中:

matches[0].Group[1] == "!(" 
matches[0].Group[2] == "'d" 
matches[0].Group[3] == "%*" 

答案 1 :(得分:-1)

regexPlanet是你的朋友,在那里测试你的表情。