2

在 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,matches[0] 为“|!('d%*|”。

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

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

我做错什么了?

查克

4

2 回答 2

1

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

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

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

matches[0].Group[1] == "!(" 
matches[0].Group[2] == "'d" 
matches[0].Group[3] == "%*" 
于 2012-09-13T21:14:50.610 回答
-1

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

于 2012-09-13T21:04:01.680 回答