Поиск равных сигнатур в последовательности

Есть строка с числами, по типу 1,2,3, в которых могут быть любые числа. Мне нужно проверить, есть ли в строке <любое число>,255,<любое число>. И если есть, то нужно проверить - равны ли два, или более найденных чисел друг другу, выполняя определенное действие. Например 1,255,0, 1,255,0 и 123,255,0 - первые два значения равны и действие выполнится.

При этом 255 может появляться и в первом/последнем числе, но действия должны выполняться только тогда, когда 255 появляется во втором. Также 255 может встречаться более двух раз, а может и ни разу. Если, например, значений с 255 посередине будет десять - нужно сравнить их всех и если в двух (или более) будут одинаковые первые числа - выполнить действие. Ну и напоследок: необязательно использовать Regex, главное - результат! Я его использую, потому-что ничего другого не нашёл. Забыл также сказать, что каждые три числа идёт символ ~, то есть 1,2,3~1,225,0~1,1,1

Мой код на данный момент:

Regex regex = new Regex(@"(\w*),255,");
MatchCollection matches = regex.Matches(txt);

Ответы (1 шт):

Автор решения: Vladimir Afanasyev

Топорный вариант (если я правильно понял ваш вопрос), но без regexp, так как не понимаю зачем он тут вообще. Но и этот вариант не очень хорош, потому что в для отсутствия ошибок надо будет кастить правое и левое значение, т.к. если они не кастятся в инт автоматом, то придется пропускать/выдавать ошибку, так как при таком условии он будет сравнивать стринги, а не инты:

string s = "45,255,32,34,255,34,255,34";
string[] parse = s.Split(",");
   for (int i = 1; i<parse.Length-1; i++)
   {
      if (parse[i-1] == parse[i+1] && parse[i] == "255")
         Console.WriteLine("На позиции " + i + " стоит 255, правый и левый элемент от которого равны");
   }

Вывод:

На позиции 4 стоит 255, правый и левый элемент от которого равны
На позиции 6 стоит 255, правый и левый элемент от которого равны

upd:

string s = "45,255,32~34,255,34~255,34,4";
foreach (string element in s.Split("~"))
{
   string[] values = element.Split(",");
   if (Convert.ToInt32(values[1]) == 255 && Convert.ToInt32(values[0]) == Convert.ToInt32(values[2]))
      Console.WriteLine(element);
}

upd2:

string s = "45,255,32~34,255,34~255,34,4";
List<int> nums = new List<int>();


foreach (string element in s.Split("~"))
{
   string[] values = element.Split(",");
   if (Convert.ToInt32(values[1]) == 255)
      if (nums.Contains(Convert.ToInt32(values[0])))
         Console.WriteLine("Есть совпадение по первому значению");
      else nums.Add(Convert.ToInt32(values[0]));
}
→ Ссылка