我有以下字符串:
[A] == [B] * 10 - FUNCTION([C], STRING_EXPRESSION, FUNCTION([D],[C],[E])), FUNCTION([C], [X]), 100
并希望用括号外的逗号将其拆分为:
[A] == [B] * 10 - FUNCTION([C], STRING_EXPRESSION, FUNCTION([D],[C],[E]))
FUNCTION([C], [X])
100
我无法单独执行此操作或使用此处的任何类似答案。
例如,,\s*(?!\[^()\]*\))
正则表达式效果很好,但只有在没有使用嵌套括号的情况下才有效,这就是我的情况。
有人能告诉我如何分割值(使用或不使用正则表达式)?
答案 0 :(得分:6)
您可以使用匹配而不是拆分:
(?:(?:\((?>[^()]+|\((?<number>)|\)(?<-number>))*(?(number)(?!))\))|[^,])+
请参阅demo
这一部分 - \((?>[^()]+|\((?<number>)|\)(?<-number>))*(?(number)(?!))\)
- 匹配平衡括号,而这 - [^,]
- 任何字符,但逗号。
请参阅IDEONE demo:
var line = "[A] == [B] * 10 - FUNCTION([C], STRING_EXPRESSION, FUNCTION([D],[C],[E])), FUNCTION([C], [X]), 100";
var matches = Regex.Matches(line, @"(?:(?:\((?>[^()]+|\((?<number>)|\)(?<-number>))*(?(number)(?!))\))|[^,])+");
foreach (Match m in matches)
Console.WriteLine(m.Value.Trim());
输出:
[A] == [B] * 10 - FUNCTION([C], STRING_EXPRESSION, FUNCTION([D],[C],[E]))
FUNCTION([C], [X])
100
答案 1 :(得分:-1)
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));