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

本文关键字:太多 正则表达式 NET | 更新日期: 2023-09-27 18:34:40

我正在尝试将像<stuff>{<more stuff>}这样的字符串解析为两组<stuff><more stuff>

我的正则表达式很简单:

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

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

例如,

test{case}给出:

test{case}{case}

test{case}test{case} .

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

我做错了什么?

另外:如何使用可选的最后一个逗号将其扩展到CSV情况(以上将针对一个元素(。

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

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

尝试命名组(使用语法(?<name>...)((您在第一组上也有原子捕获,我认为您在这里不需要(:

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

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

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