Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用括号外的逗号拆分值?_C#_.net_Regex_Split - Fatal编程技术网

C# 用括号外的逗号拆分值?

C# 用括号外的逗号拆分值?,c#,.net,regex,split,C#,.net,Regex,Split,我有以下字符串: [A] == [B] * 10 - FUNCTION([C], STRING_EXPRESSION, FUNCTION([D],[C],[E])), FUNCTION([C], [X]), 100 并用括号外的逗号将其拆分: [A]==[B]*10-函数([C]、字符串表达式、函数([D]、[C]、[E])) 函数([C],[X]) 100 我不能单独做这件事,也不能使用这里的任何类似答案 例如,正则表达式工作得很好,但只有在不使用嵌套括号的情况下才能工作,这就是我的情况

我有以下字符串:

[A] == [B] * 10 - FUNCTION([C], STRING_EXPRESSION, FUNCTION([D],[C],[E])), FUNCTION([C], [X]), 100
并用括号外的逗号将其拆分:

  • [A]==[B]*10-函数([C]、字符串表达式、函数([D]、[C]、[E]))
  • 函数([C],[X])
  • 100
我不能单独做这件事,也不能使用这里的任何类似答案

例如,正则表达式工作得很好,但只有在不使用嵌套括号的情况下才能工作,这就是我的情况


谁能告诉我如何分割值(使用或不使用正则表达式)?

您可以使用匹配而不是分割:

(?:(?:\((?>[^()]+|\((?<number>)|\)(?<-number>))*(?(number)(?!))\))|[^,])+
输出:

[A] == [B] * 10 - FUNCTION([C], STRING_EXPRESSION, FUNCTION([D],[C],[E]))
FUNCTION([C], [X])
100
string s=“[A]=[B]*10-函数([C]、字符串表达式、函数([D]、[C]、[E])、函数([C]、[X])、100”;
列表拆分=新列表();
int beginPos=0;
对于(int i=1;i
您必须使用push/pop方法或递归方法解析术语。这看起来像是学校的作业。这不是一个简单的问题,需要几个小时才能得到完整的解决方案。正如我所说的,@juharr的可能重复-这些答案不适用于嵌套括号。@gotqn这里有几个答案考虑了嵌套括号,例如fubo的答案。它们不是正则表达式的答案,但您说过您可以使用不使用正则表达式的解决方案。您可以阅读有关它们的信息,然后。这不是一件小事,但它相当直截了当,尽管看起来很凌乱:(不含该部分的正则表达式非常简单:只需匹配平衡括号或任何非逗号的内容。此解决方案是否仅适用于某一级别的嵌套括号,并且肯定会与不同级别的嵌套中断?乍一看似乎是这样。@Klar:级别的数量可以很多,它只受可用的堆栈深度。我应该替换哪些圆括号来搜索花括号之外的命令?@dan您想要
@(?:(?:\{(?>[^{}]+{(?){(?)}(?)*(?(n)(?!)})|[^,]+“
,请参阅。
[A] == [B] * 10 - FUNCTION([C], STRING_EXPRESSION, FUNCTION([D],[C],[E]))
FUNCTION([C], [X])
100
string s = "[A] == [B] * 10 - FUNCTION([C], STRING_EXPRESSION, FUNCTION([D], [C],[E])), FUNCTION([C], [X]), 100";
  List<string> splitted = new List<string>();
  int beginPos = 0;

  for (int i=1; i < s.Length; i++)
  {
    if (s[i] == ',' && s[i-1] == ')')// && i!=beginPos)
    {
      splitted.Add(s.Substring(beginPos, i-beginPos));
      i++;
      beginPos = i;
    }
  }

  if(beginPos < s.Length)
    splitted.Add(s.Substring(beginPos, s.Length-beginPos));