我的编码问题。我想使用正则表达式和c#将项添加到treeview。但问题是要添加的节点具有相同的名称。
代码::
treeView1.Nodes.Clear();
string name;
TreeNode Root = new TreeNode();
RootNode.Text = "RootNode";
treeView1.Nodes.Add(RootNode);
MatchCollection ToGetPulinName = Regex.Matches(richtextbox1.Text,@"pulin (.*?)\{");
foreach (Match m in ToGetPulinName)
{
Group g = m.Groups[1];
name= g.Value;
TreeNode SecondRoot = new TreeNode();
SecondRoot.Text = "PulinRoot:"+pulinname;
RootNode.Nodes.Add(SecondRoot);
MatchCollection ToFoundIn = Regex.Matches(codingtxt.Text, @"pulin \w+{(.*?)}", RegexOptions.Singleline);
foreach (Match min in ToFoundIn)
{
Group gMin = min.Groups[1];
string gStr = gMin.Value;
string classname;
MatchCollection classnames = Regex.Matches(codingtxt.Text, @"class (.*?)\{", RegexOptions.IgnoreCase);
foreach (Match mis in classnames)
{
Group gmis = mis.Groups[1];
classname = gmis.Value;
TreeNode ClassRoot = new TreeNode();
ClassRoot.Text = "ClassRoot";
SecondRoot.Nodes.Add(ClassRoot);
}
}
}
结果
请帮助,谢谢。
答案 0 :(得分:0)
问题在于如何使用正则表达式解析数据,而不是辅助树视图,这在这里不是真正的问题。
使用以下模式,我们将搜索您的文本并将所有数据分组/提取出来,直到我称之为名称空间及其相关类。
在使用(?< > )
命名匹配捕获的模式中,我们可以更轻松地提取数据。以下内容创建了一个动态的linq entites来保存我们的数据。我正在展示Linqpad Dump()
扩展的结果,它为我们提供了数据。此外,我还为Tester添加了另一个类:
var data = @"
pulin Tester { class Main { } class Omega{} }
pulin Tester2 { }
";
var pattern = @"
pulin\s+ # Look for our anchor `pulin` which identifies the current namespace,
# it will designate each namespace block
(?<Namespace>[^\s{]+) # Put the namespace name into the named match capture `Namespace`.
( # Now look multiple possible classes
.+? # Ignore all characters until we find `class` text
(class\s # Found a class, let us consume it until we find the textual name.
(?<Class>[^\{]+) # Insert the class name into the named match capture `Class`.
)
)* # * means 0-N classes can be found.
";
// We use ignore pattern whitespace to comment the pattern.
// It does not affect the regex parsing of the data.
Regex.Matches(data, pattern, RegexOptions.IgnorePatternWhitespace)
.OfType<Match>()
.Select (mt => new
{
Namespace = mt.Groups["Namespace"].Value,
Classes = mt.Groups["Class"].Captures
.OfType<Capture>()
.Select (cp => cp.Value)
})
.Dump();
Dump()的结果,最终你将遍历以填充树。:
我留给您使用数据正确填充树。
注意我会疏忽提醒你,使用正则表达式进行词法解析有其固有的缺陷,最终使用适合这项工作的真正解析工具会更好。