我有两个变量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++;
}
答案 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)
一旦您可以逐步定义您实际希望代码执行的操作,那么实现就很容易进行研究和整合。在步骤中,您需要这个:
这样做的天真实现如下:
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;字符串的一部分始终是相同的。