C#.NET Regex匹配太多了

时间:2016-02-16 00:08:26

标签: c# regex

我正在尝试将<stuff>{<more stuff>}之类的字符串解析为两个组<stuff><more stuff>

我的正则表达式很简单:

@"^((?>[^\{]*))(\{.*\})?$"

一些在线正则表达式解析器显示它有效,但它在.net中不起作用。我最终得到的第二组具有相同的匹配,或者第一组也匹配括号{}

例如,

test{case}给出:

test{case}{case}

test{case}test{case}

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

我做错了什么?

另外:如何将此扩展为CSV情况(上面将是一个元素),并带有可选的最后一个逗号。

1 个答案:

答案 0 :(得分:0)

你的正则表达式是正确的,但我怀疑你遇到了这些小组的问题。

尝试命名组(使用语法(?<name>...))(您还在第一组上进行了原子捕获,我认为您不需要这样做):

@"^(?<stuff>[^\{]*)(?<moreStuff>\{.*\})?$"

现在您可以通过以下方式访问结果:

var match = regex.Match(input);
if (match.Success)
{
    var stuff = match.Groups["stuff"];
    var moreStuff = match.Groups["moreStuff"];
}