C# C中的Regex.splithelp#

C# C中的Regex.splithelp#,c#,regex,split,C#,Regex,Split,我有这个字符串: A,B,C[D,E,F[G,H,J[I]],K,L[M,N] 使用Regex.Split()我需要一个像这样分割的结果: A,B C[D,E] F[G,H] J[I] K L[M,N] 我不确定是否可以用一个正则表达式(如果可能的话,我怀疑所需的正则表达式会非常复杂) 这里有一个备选方案,尽管完全跳过正则表达式并手动解析所有内容可能更好: string yourString = "A,B,C[D,E,F[G,H,J[I]],K,L[M,N]"; var parts =

我有这个字符串:

A,B,C[D,E,F[G,H,J[I]],K,L[M,N] 
使用Regex.Split()我需要一个像这样分割的结果:

A,B
C[D,E]
F[G,H]
J[I]
K
L[M,N]

我不确定是否可以用一个正则表达式(如果可能的话,我怀疑所需的正则表达式会非常复杂)

这里有一个备选方案,尽管完全跳过正则表达式并手动解析所有内容可能更好:

string yourString = "A,B,C[D,E,F[G,H,J[I]],K,L[M,N]";

var parts = Regex.Split(yourString, @",(?=[^,\[]+\[)|\]+,?")
                 .Where(s => s.Length > 0)
                 .Select(s => s.Contains("[") ? s + "]" : s);
试试这个:

Regex re = new Regex(@"((?:\w+)\[(?:(?:\w+\b,?)(?!\[))+)");

var result = re.Split(str.Replace(" ", ""))
               .Select(s => s.TrimEnd(',', '[').TrimStart(']', ','))
               .Where(s => !string.IsNullOrEmpty(s));

如果没有regexp,这将更容易实现。Regexp不能很好地处理递归结构。而且,这是一种非常奇怪的输出格式。。。这到底是为了什么?你确定括号不平衡吗?谢谢你的帮助,但我只是用这些字母来帮助理解我的问题,因为真正的字符串是例如:标识符、块[Identifier、内容[Identifier、price、destination]、描述、,Keywords@expertCode:好的,我已经编辑好了。不过,最好先提一下这个要求。抱歉,还有一个问题,但我在复杂的字符串中发现了另一个问题:描述、标题、内容[JE_-Box.Identifier,JE_-Box.Box*,JE_-Box.Namespace,JE_-Box.Title*,JE_-Box.Channels,JE_-Box.PriorityChannels,JE_-Box.ForceChannel,JE_-Box.SingleQuery,JE_-Box.Template,JE_-Box.element[JE_-Example.Lead],JE_-Box.LastNews[JE_-Article.Lead,JE_-Article.Galeria[JE_-Gallery.Title.Title,JE_-Gallery.Banner[JE,Keywords@expertCode:您可以编辑您的问题以包含额外的详细信息吗?例如,输入字符串的外观以及您的预期结果。