从Dijkstra算法C#的点表示法输入中解析图形

我正在尝试从文本文件中读取图形并进行解析,以便能够提取顶点,边和权重以用于Dijkstra的Algorithm实现。

文本文件包含以下结构:

graph {
    a -- b[label="5",weight="5"];
    a -- c[label="1",weight="1"];
    c -- b[label="3",weight="3"];
    c -- e[label="1",weight="1"];
    e -- b[label="1",weight="1"];
}

发现很难使用.split,因为数据没有用相同的分隔符分隔。

我需要从第一行中提取例如: 需要设置为。 b需要设置为 并且需要将5设置为体重

请问有什么办法可以解决这个问题?

qq378755837 回答:从Dijkstra算法C#的点表示法输入中解析图形

我们可以使用以下正则表达式轻松提取值:

(\w+) -- (\w+)\[label="(\w+)",weight="([0-9]*\.?[0-9]+)"\];

完整代码:

string rawData = File.ReadAllText("H:\\data.txt");
string pattern = "(\\w+) -- (\\w+)\\[label=\"(\\w+)\",weight=\"([0-9]*\\.?[0-9]+)\"\\];";
var matches = Regex.Matches(rawData,pattern);

编辑: 这是我们从每个匹配对象中获取不同值的方法

定义一个Edge类,仅用于保存数据

class Edge {
    public string NodeALabel;
    public string NodeBLabel;
    public double Weight;
    public string EdgeLabel;
}

从每个匹配项中获取组值。组号由组左侧的左括号括起来决定。

var edgeList = matches.Select(match => new Edge() {
    NodeALabel= match.Groups[1].Value,NodeBLabel= match.Groups[2].Value,Weight= double.Parse(match.Groups[4].Value),EdgeLabel= match.Groups[3].Value
}).ToList();
本文链接:https://www.f2er.com/3019441.html

大家都在问