c# - C# 中的分隔嵌套括号

标签 c# regex split nested parentheses

我想在给定字符串中从括号内到外取值。因此,如果我的字符串中有括号,首先我必须到达最深的括号。之后,我必须采用后面的括号如何组合前面的字符串。我必须沿着字符串进行这些过程。

输入示例:

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

关于c# - C# 中的分隔嵌套括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38479148/

相关文章:

c# - 如何在 C# 中使用 C++ 类实例

c# - 使用 F# 实现 C# 异步接口(interface)

c# - MVC 4 ViewModel 没有被发送回 Controller

regex - 如何从正则表达式搜索中排除逗号?

javascript - 带标签的不区分大小写的换行子字符串

java - 从文件读取时如何将一行保存到链接列表中并将下一行保存到另一个列表中

c# - 当用户移动窗口时 PushFrame 锁定 WPF 窗口

javascript - 使用 javascript 正则表达式从日期字符串中检索年份

python - 使用 python 拆分系列中的每个元素

mysql - 将列 (varchar) 拆分为多个 int 列