gpt4 book ai didi

c# - TreeView 的正则表达式

转载 作者:太空宇宙 更新时间:2023-11-03 10:49:30 25 4
gpt4 key购买 nike

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

"#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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com