public static CldrTreePath Parse(string path)
        {
            var match   = PathRegex.Match(path);
            var keys    = match.Groups["key"].Captures.Cast <Capture>().Select(x => new { x.Index, x.Value, IsKey = true });
            var indexes = match.Groups["index"].Captures.Cast <Capture>().Select(x => new { x.Index, x.Value, IsKey = false });

            var merged = keys.Concat(indexes).OrderBy(x => x.Index);

            var result = new CldrTreePath();

            //if (!match.Success)
            //  throw new FormatException($"Path segment expected to match '{pattern}' but was '{potentialSegment}'.");

            foreach (var capture in merged)
            {
                if (capture.IsKey)
                {
                    result.Enqueue(new CldrTreePathSegment(capture.Value));
                }
                else
                {
                    result.Enqueue(new CldrTreePathSegment(int.Parse(capture.Value)));
                }
            }

            return(result);
        }