比较两个值并在它们之间获取数据

时间:2016-09-26 18:24:41

标签: c# .net regex

我有两个变量2016-V-0049和2016-V-0070。有没有一种方法可以比较它们并在比较最后的数字时获取它们之间的所有缺失数据。所以在这种情况下我希望结果是2016-V-0050,2016-V-0051,2016-V-0052 ......等。

我也可以拥有可重复的模式,例如比较2016P13和2016P25(NumberWordNumber)并获取缺失的数字。

很抱歉不包括我尝试过的内容。这是我做了什么,有效的。我只是在寻找更多通用的模式。

string s = "2016-s-89";
string p = "2016-s-95";
var start = Convert.ToInt32(Regex.Match(s, @"\d+$").Value) +1;
var end = Convert.ToInt32(Regex.Match(p, @"\d+$").Value);
var index = Regex.Match(s, @"\d+$").Index;
string data = s.Substring(0, index);
List<string> newCases = new List<string>();
while (start < end)
{
    string newCaseNumber = string.Format("{0}{1}", data, start);
    newCases.Add(newCaseNumber);
    start++;
}

2 个答案:

答案 0 :(得分:0)

你应该使用substring()函数并像这段代码一样转换为整数:

    var min = "2016-V-0049";
    var max = "2016-V-0070";

    var a = min.Substring(7);
    var b = max.Substring(7);

    int convertableVariable1 = int.Parse(a);
    int convertableVariable2 = int.Parse(b);

    for (int i = convertableVariable1; i < convertableVariable2; i++){
          Console.WriteLine("2016-V-{0:0000}",i);
    }


   Console.WriteLine("Difference :{0}", convertableVariable2 - convertableVariable1);

答案 1 :(得分:0)

一旦您可以逐步定义您实际希望代码执行的操作,那么实现就很容易进行研究和整合。在步骤中,您需要这个:

  1. Parse the input string denoting the starting number,因此您可以获得您感兴趣的数字部分。
  2. 现在你有一个数字字符串,但它仍然是一个字符串。 Parse it to an integer因此您可以稍后对其执行算术运算,例如将其递增1。
  3. 重复1&amp; 2表示结束编号的字符串。
  4. 循环开始和结束编号之间的数字,并使用新编号重建原始字符串。
  5. 这样做的天真实现如下:

    string inputStart = "2016-V-0049";
    string inputEnd = "2016-V-0070";
    
    string pattern = @"[0-9]{4}\-[A-Z]{1}\-([0-9]{4})";
    
    var regex = new Regex(pattern);
    
    var match = regex.Match(inputStart);
    var numberStart = int.Parse(match.Groups[1].Value);
    
    match = regex.Match(inputEnd);
    var numberEnd = int.Parse(match.Groups[1].Value);
    
    for (int currentNumber = numberStart + 1; currentNumber < numberEnd; currentNumber++)
    {
        Console.WriteLine("2016-V-{0:0000}", currentNumber);
    }       
    

    但是这并没有进行输入检查(开始&lt;结束,开始和结束实际上符合模式),不支持不同的模式(模式和重建字符串是硬编码的)并假设& #34; 2016-V - &#34;字符串的一部分始终是相同的。