c# - TreeView 的正则表达式

标签 c# regex treeview

我尝试像这样解析字符串:

"#1#Process#{some process|info}{some name|some info {child info|child info}}{some name|some info}"

在多条消息中创建如下字符串:

#1#Process#
-some process|info
-some name|some info
   -child info|child info
-some name|some info

我正在尝试使用 RegExp 和以下代码:

using System;
using System.Collections;
using System.Text.RegularExpressions;

namespace prRegEXP
{
    class Program
    {
        static String st="";

        public static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            // TODO: Implement Functionality Here
            var pattern = @"\{(.*?)\}";
            var query = "#1#Process#{some process|info}{some name|some info {child info|child info}}{some name|some info}";
            FindTree (pattern, query);
            Console.WriteLine(st);
            Console.WriteLine();
            Console.WriteLine("Press any key to continue . . . ");
            Console.ReadKey(true);
        }       


        private static void FindTree (String pattern, String query) {
            var matches = Regex.Matches(query, pattern);            
            foreach (Match m in matches) {
                st += m.Groups[1] + "\n";

                if (Regex.IsMatch(m.Groups[1].ToString(), @"\{(.*?)" )) {                   
                    FindTree (@"\{(.*?)", m.Groups[1].ToString());

                }    
            }
        }
    }
}

它基于 example solution我发现并且想创建一些消息树来处理内部消息(例如child info|child name)。而且可能有很多。

我无法弄清楚如何匹配子表达式并将其以递归参数发送。有什么想法或修复吗?

最佳答案

编写一个简单的正则表达式来支持 N 深度递归是不可能的(?)或者至少非常困难。

一个更简单的解决方案是逐个字符地遍历字符串,并在发现新消息时插入缩进和换行符。

类似的事情应该有效:

private static String FindTree(String query)
    System.Text.StringBuilder sb = new System.Text.StringBuilder();
    String indent = "";
    foreach (var ch in query)  {
        if (ch == '{') {
            sb.Append("\n");
            sb.Append(indent);
            sb.Append("- ");
            indent += "\t";
        } else if (ch == '}') {
            indent = indent.Substring(1);
        } else {
            sb.Append(ch);
        }
    }
    return sb.ToString();
}

上面的代码没有经过测试,我也不精通 C#,所以它可能充满错误,但它应该说明了基本思想。

关于c# - TreeView 的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22038875/

相关文章:

javascript - 将 Scanning For className JavaScript block 转换为使用 jQuery

c# - 没有使用()范围的DAL方法中的 Entity Framework 新的dbContext

C# 按键不捕获 'delete' 键

c# - ObjectId 数组的 MongoDB C# BsonRepresentation

javascript - 在字符串对象中查找匹配模式

wpf - 如何防止 TreeView 所选项目的子项继承其格式?

c# - 如何比较两个十六进制数

用于在表单输入中查找乱码的 Javascript 脚本

Javascript正则表达式不格式化每个实例

jsf - 如何呈现一个特定节点已经展开的 RichFaces 树