c# - 当我期待 3 时只得到一场比赛

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

我原以为 matches.Count 是 3,解析后的字符串是:

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

我做错了什么?

查克

最佳答案

您的正则表达式将 | 条之间的所有内容捕获到一个匹配项中。如果您想要括号中的部分,它们位于 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] == "%*" 

关于c# - 当我期待 3 时只得到一场比赛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12414735/

相关文章:

java - 冒号分隔值正则表达式验证

visual-studio-2010 - 如何在 VS2010 Web 部署构建模板中执行 MSBuild 任务?

c++ - Vista/Win 7 SDK bufferoverflowu.lib 链接错误

c# - 多个 kestrel 无状态服务实例在服务结构中的不同端口上运行

c# - 以编程方式从 GridLayoutGroup 获取计数的列和行

c# - .net 中的 Soap 登录

c# - 从 MSChart 的一个点放大缩小

c# - 如何使用 ASP.NET 4.0 URL 重写来重写 URL?

ios - Double\\in 正则表达式 iOS

.net - 使用 Windows Azure 工具,为什么我会收到对内存位置的无效访问?