public static RuleModel Parse(IEnumerable <string> input) { var model = new RuleModel(); foreach (var line in input) { var nullMatch = NullRuleParser.Match(line); if (nullMatch.Success) { model.AddNodeIfNotExists(nullMatch.Groups[1].Value); continue; } var match = RuleParser.Match(line); var from = match.Groups[1].Value.Trim(); var toChunk = match.Groups[2].Value; foreach (var part in toChunk.Split(", ")) { var chunkMatch = ToRuleParser.Match(part); var to = chunkMatch.Groups[2].Value.Trim(); var count = int.Parse(chunkMatch.Groups[1].Value); model.AddEdge(from, to, count); } } return(model); }