Вывести похожие строки, если в них есть одинаковые значения в цикле?
Имеется файл MyLinks.txt содержащий url адреса вида:
http://MyServer.tp/Program/323.23/323.23-dba-win10-64bit-demo-expired.zip
http://MyServer.tp/Program/323.23/323.23-dba-win10-64bit-original.zip
http://MyServer.tp/Program/361.40/361.40-dba-win10-64bit-demo-expired.zip
http://MyServer.tp/Program/230.33/230.33-dba-win10-64bit-original.zip
.....................................................................
http://MyServer.tp/Program/399.07/399.07-dba-win10-64bit-original.zip
http://MyServer.tp/Program/353.30/353.30-dba-win10-64bit-demo-expired.zip
http://MyServer.tp/Program/355.60/355.60-dba-win10-64bit-original.zip
http://MyServer.tp/Program/340.40/340.40-dba-win10-64bit-original.zip
.....................................................................
Далее я хочу показать только те адреса, которые содержат между собой 100% совпадение только в части пути значения версии (то есть тут: 353.62/353.62). Далее я делаю так:
foreach (string line in File.ReadAllLines(@"MyLinks.txt"))
{
if (Regex.IsMatch(line, @"\d{3}\.\d{2}", RegexOptions.IgnoreCase))
{
Console.WriteLine(line);
}
}
Вроде бы все работает, и действительно отображаются строки как нужно, НО, вместе с этим показываются и куча таких к примеру строк:
http://MyServer.tp/Program/353.30/353.30-dba-win10-64bit-original.zip
http://MyServer.tp/Program/355.60/355.60-dba-win10-64bit-original.zip
http://MyServer.tp/Program/361.40/361.40-dba-win10-64bit-original.zip
http://MyServer.tp/Program/311.63/311.63-dba-win10-64bit-demo-expired.zip
http://MyServer.tp/Program/399.07/399.07-dba-win10-64bit-demo-expired.zip
А мне нужно всего навсего показывать строки у которых в пути одинаковые значения версии, и имеется на конце либо ...-demo-expired, либо ...-original, но я считаю, если будут одинаковые значения у строк, то и не нужно еще искать и по окончанию, я думаю это лишнее. А выводится должно вот так:
http://MyServer.tp/Program/323.23/323.23-dba--win10-64bit-demo-expired.zip
http://MyServer.tp/Program/323.23/323.23-dba--win10-64bit-original.zip
http://MyServer.tp/Program/320.20/320.20-dba--win10-64bit-demo-expired.zip
http://MyServer.tp/Program/320.20/320.20-dba--win10-64bit-original.zip
http://MyServer.tp/Program/280.80/280.80-dba--win10-64bit-demo-expired.zip
http://MyServer.tp/Program/280.80/280.80-dba--win10-64bit-original.zip
http://MyServer.tp/Program/160.60/160.60-dba--win10-64bit-demo-expired.zip
http://MyServer.tp/Program/160.60/160.60-dba--win10-64bit-original.zip
...................................................................
Я уже всю голову себе сломал, как это сделать и так пробовал:
if (Regex.IsMatch(line, @"([0-9]{3})+\./([0-9]{2})+"*, RegexOptions.IgnoreCase)
{
Console.WriteLine(line);
}
И вот так:
if (Regex.IsMatch(line, @"([0-9]{3})+\./([0-9]{2})+"*, RegexOptions.IgnoreCase) && (Regex.IsMatch(line, @"demo-expired.*$", RegexOptions.IgnoreCase) || (Regex.IsMatch(line, @"original.*$", RegexOptions.IgnoreCase))))
{
Console.WriteLine(line);
}
Но он все равно показывает лишние похожие только по паттерну строки, как правильно в таком случае должно выглядеть условие?