C#.NET正则表达式匹配过多

C#.NET正则表达式匹配过多,c#,regex,C#,Regex,我试图将像{}这样的字符串分为两组和 我的正则表达式很简单: @"^((?>[^\{]*))(\{.*\})?$" 一些在线正则表达式解析器显示它可以工作,但在.net中不工作。要么第二组匹配相同,要么第一组匹配括号{} e、 g test{case}给出: 测试{case}和{case}或 test{case}和test{case} (取决于正则表达式的一些轻微修改) 我做错了什么 另外:如何使用可选的最后一个逗号将其扩展到CSV案例(上面是一个元素)。您的正则表达式是正确的,但我怀疑

我试图将像
{}
这样的字符串分为两组

我的正则表达式很简单:

@"^((?>[^\{]*))(\{.*\})?$"
一些在线正则表达式解析器显示它可以工作,但在
.net
中不工作。要么第二组匹配相同,要么第一组匹配括号{}

e、 g

test{case}
给出:

测试{case}
{case}

test{case}
test{case}

(取决于正则表达式的一些轻微修改)

我做错了什么


另外:如何使用可选的最后一个逗号将其扩展到CSV案例(上面是一个元素)。

您的正则表达式是正确的,但我怀疑您在使用组时遇到了问题

改为尝试命名组(使用语法
(?…)
)(您在第一个组上还有一个原子捕获,我认为您在这里不需要它):


原子能使它工作得更好,但可能不需要。为什么我使用命名组很重要?通过字符串与整数建立索引应该无关紧要?好吧,看来我猜有一组人正在进行激烈的竞争。想解释一下原因吗?e、 例如,使用命名组是可行的,但这仅仅是因为我得到的是3个组而不是2个组,因此我的索引是错误的。你的例子就是这样。也许是因为0组是完全匹配的?是的,这就是我所说的你们组的麻烦。组
0
是完全匹配,组
1
是第一组,以此类推。好吧,它起作用了。如果我想用逗号分隔这些组,您知道如何扩展示例“递归匹配”组吗?e、 例如,somestuff1{somestuff2},somestuff3{somestuff4}。类似于@“^((?[^\{]*)(?\{.\}),\s)?$”(这不起作用,但显示了我要去的地方。基本上是CSV,但我希望能够提取任意数字。
@"^(?<stuff>[^\{]*)(?<moreStuff>\{.*\})?$"
var match = regex.Match(input);
if (match.Success)
{
    var stuff = match.Groups["stuff"];
    var moreStuff = match.Groups["moreStuff"];
}