在 C# 中分隔嵌套的括号
separate nested parentheses in c#
我想从给定字符串的括号内到括号外取值。所以,如果我的字符串中有括号,首先我必须到达最深的括号。之后,我必须在后面的括号中说明如何组合前面的字符串。我必须沿着字符串进行这些过程。
示例输入:
C1 AND [C2 OR C3 OR [C4 OR [C5 AND C6] AND C7]] OR C8
输出:
C5 AND C6
C4 OR [C5 AND C6] AND C7
C2 OR C3 OR [C4 OR [C5 AND C6] AND C7]
C1 AND [C2 OR C3 OR [C4 OR [C5 AND C6] AND C7]] OR C8
这是一个简单的堆栈实现; 正则表达式 不适用于此类解析 问题:
private static IEnumerable<String> Nested(string value) {
if (string.IsNullOrEmpty(value))
yield break; // or throw exception
Stack<int> brackets = new Stack<int>();
for (int i = 0; i < value.Length; ++i) {
char ch = value[i];
if (ch == '[')
brackets.Push(i);
else if (ch == ']') {
//TODO: you may want to check if close ']' has corresponding open '['
// i.e. stack has values: if (!brackets.Any()) throw ...
int openBracket = brackets.Pop();
yield return value.Substring(openBracket + 1, i - openBracket - 1);
}
}
//TODO: you may want to check here if there're too many '['
// i.e. stack still has values: if (brackets.Any()) throw ...
yield return value;
}
...
string source = "C1 AND [C2 OR C3 OR [C4 OR [C5 AND C6] AND C7]] OR C8";
var result = Nested(source);
打印出来:
// C5 AND C6
// C4 OR [C5 AND C6] AND C7
// C2 OR C3 OR [C4 OR [C5 AND C6] AND C7]
// C1 AND [C2 OR C3 OR [C4 OR [C5 AND C6] AND C7]] OR C8
Console.Write(String.Join(Environment.NewLine, result));
我想从给定字符串的括号内到括号外取值。所以,如果我的字符串中有括号,首先我必须到达最深的括号。之后,我必须在后面的括号中说明如何组合前面的字符串。我必须沿着字符串进行这些过程。
示例输入:
C1 AND [C2 OR C3 OR [C4 OR [C5 AND C6] AND C7]] OR C8
输出:
C5 AND C6
C4 OR [C5 AND C6] AND C7
C2 OR C3 OR [C4 OR [C5 AND C6] AND C7]
C1 AND [C2 OR C3 OR [C4 OR [C5 AND C6] AND C7]] OR C8
这是一个简单的堆栈实现; 正则表达式 不适用于此类解析 问题:
private static IEnumerable<String> Nested(string value) {
if (string.IsNullOrEmpty(value))
yield break; // or throw exception
Stack<int> brackets = new Stack<int>();
for (int i = 0; i < value.Length; ++i) {
char ch = value[i];
if (ch == '[')
brackets.Push(i);
else if (ch == ']') {
//TODO: you may want to check if close ']' has corresponding open '['
// i.e. stack has values: if (!brackets.Any()) throw ...
int openBracket = brackets.Pop();
yield return value.Substring(openBracket + 1, i - openBracket - 1);
}
}
//TODO: you may want to check here if there're too many '['
// i.e. stack still has values: if (brackets.Any()) throw ...
yield return value;
}
...
string source = "C1 AND [C2 OR C3 OR [C4 OR [C5 AND C6] AND C7]] OR C8";
var result = Nested(source);
打印出来:
// C5 AND C6
// C4 OR [C5 AND C6] AND C7
// C2 OR C3 OR [C4 OR [C5 AND C6] AND C7]
// C1 AND [C2 OR C3 OR [C4 OR [C5 AND C6] AND C7]] OR C8
Console.Write(String.Join(Environment.NewLine, result));