Поиск равных сигнатур в последовательности
Есть строка с числами, по типу 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 шт):
Топорный вариант (если я правильно понял ваш вопрос), но без 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]));
}