首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >c#中单独的嵌套括号

c#中单独的嵌套括号
EN

Stack Overflow用户
提问于 2016-07-20 10:47:06
回答 1查看 1.8K关注 0票数 2

我希望在给定字符串中从内到外取值。所以,如果我的字符串中有括号,首先我必须到达最深的括号。之后,我必须在后面的括号中使用如何组合前一个字符串。我必须让这些过程沿着绳子。

示例输入:

代码语言:javascript
运行
复制
C1 AND [C2 OR C3 OR [C4 OR [C5 AND C6] AND C7]] OR C8

输出:

代码语言:javascript
运行
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-20 10:58:48

下面是一个简单的堆栈实现;正则表达式不适合这样的解析问题:

代码语言:javascript
运行
复制
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;
}

..。

代码语言:javascript
运行
复制
string source = "C1 AND [C2 OR C3 OR [C4 OR [C5 AND C6] AND C7]] OR C8";

var result = Nested(source);

打印出来:

代码语言:javascript
运行
复制
// 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));
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38479148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档