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));