首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C#中的Regex行为怪异

C#中的Regex行为怪异
EN

Stack Overflow用户
提问于 2013-09-02 21:14:04
回答 2查看 149关注 0票数 4

我在C#中使用regex时遇到了一个问题。也就是说,调试器显示正确的(IMO)结果,但是当我试图在我的应用程序中打印结果时,它们是不同的(而且是错误的)。代码如下:

代码语言:javascript
运行
复制
Match match2 = Regex.Match("048 A Dream Within A Dream (satur) (123|433) K48", "(.*)(\\((.)*?\\))\\s\\((.)*?\\)\\s.*");
string nick = match2.Groups[1].Value;
string name = match2.Groups[0].Value;
Console.WriteLine("nick - '{0}', name - '{1}'", nick, name);

预期结果将显示在调试器中,如下所示:

控制台显示不同(错误)结果:

尼克- '048一个梦在一个梦',名字- '048一个梦在一个梦(萨图尔)(123\433) K48‘

我该怎么解决呢?我希望结果与调试器中的结果完全一样。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-02 21:17:22

您忽略了这样一个事实,即Groups[0]总是代表整个比赛。第一个捕获组在Groups[1]中。你想:

代码语言:javascript
运行
复制
string nick = match2.Groups[2].Value;
string name = match2.Groups[1].Value;

它在调试器中显示的原因是,您正在查看GroupCollection中某个字段的实现细节;当它按数字请求组时,如果请求的编号为0,则返回匹配,否则会将该数字相抵1。

来自GroupCollection的文档

如果匹配成功,则集合中的第一个元素包含与整个匹配对应的Group对象。如果正则表达式包括捕获组,则每个后续元素表示捕获的组。

票数 9
EN

Stack Overflow用户

发布于 2013-09-02 21:19:34

您正在查看_groups字段,但它并不是作为Groups属性返回的内容:

更改代码以使用Groups[1]Groups[2]

代码语言:javascript
运行
复制
string nick = match2.Groups[2].Value;
string name = match2.Groups[1].Value;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18580834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档