using System;
using System.Globalization;
using System.Linq;
using System.Collections.Generic;
public class Test
{
public static void Main()
{
var rangeStrings = new List<string> { "[a-d]", "[A-H]", "[c,d]", "[B,C]", "[03-05]" };
var separator = new[] { "-", "," };
IEnumerable<IEnumerable<string>> ranges = rangeStrings
.Select(rs =>
{
string inner = rs.Replace("[", "").Replace("]", "");
string[] token = inner.Split(separator, StringSplitOptions.RemoveEmptyEntries);
bool isNumeric = token[0].All(Char.IsDigit);
int start, end;
if(isNumeric)
{
start = int.Parse(token.First());
end = int.Parse(token.Last());
}
else
{
start = (int)token.First().First();
end = (int)token.Last().Last();
}
var range = Enumerable.Range(start, end - start + 1)
.Select(i => isNumeric ? i.ToString() : ((Char)i).ToString());
return range;
});
foreach (var range in ranges)
{
Console.WriteLine("Range: {0}", string.Join(",", range.ToArray()));
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uR2xvYmFsaXphdGlvbjsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwoKcHVibGljIGNsYXNzIFRlc3QKewogICAgCgoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewogICAgICAgIHZhciByYW5nZVN0cmluZ3MgPSBuZXcgTGlzdDxzdHJpbmc+IHsgIlthLWRdIiwgIltBLUhdIiwgIltjLGRdIiwgIltCLENdIiwgIlswMy0wNV0iIH07CiAgICAgICAgdmFyIHNlcGFyYXRvciA9IG5ld1tdIHsgIi0iLCAiLCIgfTsKICAgICAgICBJRW51bWVyYWJsZTxJRW51bWVyYWJsZTxzdHJpbmc+PiByYW5nZXMgPSByYW5nZVN0cmluZ3MKICAgICAgICAgICAgLlNlbGVjdChycyA9PgogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBzdHJpbmcgaW5uZXIgPSBycy5SZXBsYWNlKCJbIiwgIiIpLlJlcGxhY2UoIl0iLCAiIik7CiAgICAgICAgICAgICAgICBzdHJpbmdbXSB0b2tlbiA9IGlubmVyLlNwbGl0KHNlcGFyYXRvciwgU3RyaW5nU3BsaXRPcHRpb25zLlJlbW92ZUVtcHR5RW50cmllcyk7CiAgICAgICAgICAgICAgICBib29sIGlzTnVtZXJpYyA9IHRva2VuWzBdLkFsbChDaGFyLklzRGlnaXQpOwogICAgICAgICAgICAgICAgaW50IHN0YXJ0LCBlbmQ7CiAgICAgICAgICAgICAgICBpZihpc051bWVyaWMpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBpbnQuUGFyc2UodG9rZW4uRmlyc3QoKSk7CiAgICAgICAgICAgICAgICAgICAgZW5kID0gaW50LlBhcnNlKHRva2VuLkxhc3QoKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSAoaW50KXRva2VuLkZpcnN0KCkuRmlyc3QoKTsKICAgICAgICAgICAgICAgICAgICBlbmQgPSAoaW50KXRva2VuLkxhc3QoKS5MYXN0KCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB2YXIgcmFuZ2UgPSBFbnVtZXJhYmxlLlJhbmdlKHN0YXJ0LCBlbmQgLSBzdGFydCArIDEpCiAgICAgICAgICAgICAgICAgICAgLlNlbGVjdChpID0+IGlzTnVtZXJpYyA/IGkuVG9TdHJpbmcoKSA6ICgoQ2hhcilpKS5Ub1N0cmluZygpKTsKICAgICAgICAgICAgICAgIHJldHVybiByYW5nZTsKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICBmb3JlYWNoICh2YXIgcmFuZ2UgaW4gcmFuZ2VzKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiUmFuZ2U6IHswfSIsIHN0cmluZy5Kb2luKCIsIiwgcmFuZ2UuVG9BcnJheSgpKSk7CiAgICAgICAgICAgIH0KCX0KfQ==
Range: a,b,c,d
Range: A,B,C,D,E,F,G,H
Range: c,d
Range: B,C
Range: 3,4,5