使用模式的.net正则表达式编号生成器

使用模式的.net正则表达式编号生成器,.net,string,.net,String,我有一根这样的绳子 "{{A to B}}{{1 to 3}}" 它应产生: A1 A2 A3 B1 B2 B3 请注意,模式字符串中可能有任意数量的模式 解决这个问题的最好办法是什么?在.Net中首选解决方案。如评论中所述,仅使用正则表达式无法解决此问题。以下是一些您可能会觉得有用的代码: var input = "{{A to B}}{{1 to 3}}{{a to f}}"; var regex = new Regex("\\{\\{((?<p1>[a-z]) to

我有一根这样的绳子

    "{{A to B}}{{1 to 3}}"
它应产生:

A1
A2
A3
B1
B2
B3
请注意,模式字符串中可能有任意数量的模式


解决这个问题的最好办法是什么?在.Net中首选解决方案。

如评论中所述,仅使用正则表达式无法解决此问题。以下是一些您可能会觉得有用的代码:

var input = "{{A to B}}{{1 to 3}}{{a to f}}";
var regex = new Regex("\\{\\{((?<p1>[a-z]) to (?<p2>[a-z]))|((?<p1>[A-Z]) to (?<p2>[A-Z]))|((?<p1>\\d) to (?<p2>\\d))\\}\\}");
var groups = new List<List<string>>();

foreach (Match match in regex.Matches(input))
{
    var start = match.Groups["p1"].Value;
    var end = match.Groups["p2"].Value;

    var group = new List<string>();
    int startValue;
    int endValue;

    if (int.TryParse(start, out startValue) && int.TryParse(end, out endValue))
    {
        for (int i = startValue; i <= endValue; i++)
        {
            group.Add(i.ToString());
        }
    }
    else
    {
        var startChar = char.Parse(start);
        var endChar = char.Parse(end);

        for (char c = startChar; c <= endChar; c++)
        {
            group.Add(c.ToString());
        }
    }

    groups.Add(group);
}

var cartesianProduct = groups.CartesianProduct();
var result = cartesianProduct.Select(x => string.Concat(x.ToArray()));

foreach (var r in result)
{
    Console.WriteLine(r);
}
var input=“{{A到B}}{{1到3}}{{A到f}}”;
var regex=new regex(“\\{((?[a-z])到(?[a-z]))|((?[a-z])到(?[a-z]))|((?\\d)到(?\\d))\}”;
变量组=新列表();
foreach(regex.Matches中的匹配(输入))
{
var start=match.Groups[“p1”]值;
var end=match.Groups[“p2”].Value;
var group=新列表();
国际标准价值;
内端值;
if(int.TryParse(开始,输出起始值)和&int.TryParse(结束,输出结束值))
{

for(int i=startValue;ifor循环如何?使用正则表达式:

    string input = "{{A to B}}{{1 to 3}}";
    Match match = Regex.Match(input, @"\{\{([A-Za-z])\sto\s([A-Za-z])\}\}\{\{([\d])\sto\s([\d])\}\}");
    List<char> rangeChar = new List<char>(){match.Groups[1].Value[0],match.Groups[2].Value[0]};
    List<int> rangeInt = new List<int>() { int.Parse(match.Groups[3].Value), int.Parse(match.Groups[4].Value) };

    for (int i =rangeChar.First() ; i<=rangeChar.Last();i++)
        for (int j = rangeInt.First(); j <= rangeInt.Last(); j++)
        {
            Console.WriteLine((char)i+j.ToString());
        }
string input=“{{A到B}{{{1到3}}”;
Match Match=Regex.Match(输入,@“{{([A-Za-z])\sto\s([A-Za-z])\}{([\d])\sto\s([\d])\}”);
List rangeChar=new List(){match.Groups[1]。值[0],match.Groups[2]。值[0]};
List rangeInt=new List(){int.Parse(match.Groups[3].Value),int.Parse(match.Groups[4].Value)};
for(int i=rangeChar.First();i rangeInt.Add(int.Parse(x));

对于(int i=rangeChar.First();iThe“regex”标记让我感到困惑-您只是想列出所有可能的组合,或者将其转换为一个regex以匹配其中任何组合,还是…?这无法由regex解决。这需要编程。您删除regex标记
    string input = "{{A to B}}{{1 to 3}}";
    Match match = Regex.Match(input, @"\{\{([A-Za-z])\sto\s([A-Za-z])\}\}\{\{([\d])\sto\s([\d])\}\}");
    List<char> rangeChar = new List<char>(){match.Groups[1].Value[0],match.Groups[2].Value[0]};
    List<int> rangeInt = new List<int>() { int.Parse(match.Groups[3].Value), int.Parse(match.Groups[4].Value) };

    for (int i =rangeChar.First() ; i<=rangeChar.Last();i++)
        for (int j = rangeInt.First(); j <= rangeInt.Last(); j++)
        {
            Console.WriteLine((char)i+j.ToString());
        }
string input = "{{A to B}}{{1 to 3}}";
string[] inputSplit = input.Split(new[] {@"}{"},StringSplitOptions.None);
List<char> rangeChar = new List<char>();
inputSplit[0].Trim(' ', '{', '}').Split(new[] { "to" }, StringSplitOptions.RemoveEmptyEntries).ToList().ForEach(x => rangeChar.Add(x.Trim()[0]));
List<int> rangeInt = new List<int>();
inputSplit[1].Trim(' ', '{', '}').Split(new[] { "to" }, StringSplitOptions.RemoveEmptyEntries).ToList().ForEach(x=> rangeInt.Add(int.Parse(x)));
for (int i =rangeChar.First() ; i<=rangeChar.Last();i++)
    for (int j = rangeInt.First(); j <= rangeInt.Last(); j++)
    {
        Console.WriteLine((char)i+j.ToString());
    }