gpt4 book ai didi

java - 如何递归解析带有嵌套括号的逗号分隔字符串

转载 作者:行者123 更新时间:2023-12-02 03:08:29 29 4
gpt4 key购买 nike

我有逗号分隔的图形输入,每个图形输入都以大括号 () 开头和结尾。大括号之间有如下设置形式的顶点和边的详细信息

({A,B,C},{(A,B),(B,C),(C,A)}),({A,B,C,D,E},{ (A,B),(B,C),(C,A),(E,D),(D,A)})

此输入字符串包含两个图形:({V1,..}{(E1),..}),({V2,..}{(E2),..}),..

{A,B,C},{(A,B),(B,C),(C,A)}
{A,B,C,D,E},{(A,B),(B,C),(C,A),(E,D),(D,A)}

是否有正则表达式可以解析此内容而无需太多样板代码...?

最佳答案

您可以使用 while(matcher.find()) 循环来匹配输入中出现的所有图形,从而相当轻松地将匹配解析为顶点和边。

String data = "({A,B,C},{(A,B),(B,C),(C,A)}),({A,B,C,D,E},{(A,B),(B,C),(C,A),(E,D),(D,A)})";

Pattern pattern = Pattern.compile("\\(\\{([^}]+)\\},\\{([^}]+)\\}\\)");
Matcher matcher = pattern.matcher(data);

while (matcher.find()) {
System.out.println("Graph vertices=" + matcher.group(1));
System.out.println(" edges=" + matcher.group(2));
}

输出:

Graph vertices=A,B,C
edges=(A,B),(B,C),(C,A)
Graph vertices=A,B,C,D,E
edges=(A,B),(B,C),(C,A),(E,D),(D,A)

正则表达式详细信息:

"\(\{([^}]+)\},\{([^}]+)\}\)" - 表达式,位于 \\\ 源翻译
"\(\{\},\{\}\)" - 匹配文字 ({ },{ }) 字符
"( ) ( ) " - 捕获组 1 和 2
"[^}]+ [^}]+ " - 匹配 1 个或多个非 } 字符

matcher.find() 将定位并捕获第一个匹配项,然后是后续匹配项,最后在找不到更多匹配项时返回 false

顶点和边数据的解析可以以类似的方式完成。留给学生。

关于java - 如何递归解析带有嵌套括号的逗号分隔字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41411558/

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