Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Как проверить содержит ли строка числа из листа? В C#

Kirieshkins Ученик (37), на голосовании 5 месяцев назад
Например в листе есть числа 55,78,83. Строка: "аолаащо74028оалащатз69055.8"-&;55)/@83@("0,04978&"/78. В этом случае если в строке содержится что то кроме 55, 78 и 83 а в нашем случае это 74028, 69055, 8, 0, 0497 (точки запятые и вообще все кроме чисел не учитывается) то возвращается false, если же наша строка выглядит так: "аолаащооалащатз55.-&;55)/@83@("&"/78 то есть из чисел содержит только те которые находятся в листе, то возвращается true
Голосование за лучший ответ
странноватый человек Мастер (1901) 6 месяцев назад
Вот код на C#, который выполняет проверку, содержит ли строка числа из заданного списка:

 using System; 
using System.Collections.Generic;
using System.Text.RegularExpressions;

class Program
{
static void Main()
{
List numbersList = new List { 55, 78, 83 };
string inputString = "аолаащо74028оалащатз69055.8-&;55)/@83@(&\"0,04978&\"/78";

bool containsOnlyAllowedNumbers = CheckStringAgainstList(inputString, numbersList);
Console.WriteLine(containsOnlyAllowedNumbers); // Вывод: False

string allowedString = "аолаащооалащатз55.-&;55)/@83@(&\"\"/78";
bool allowedResult = CheckStringAgainstList(allowedString, numbersList);
Console.WriteLine(allowedResult); // Вывод: True
}

static bool CheckStringAgainstList(string input, List allowedNumbers)
{
string allowedNumberPattern = string.Join("|", allowedNumbers);
Regex regex = new Regex($"\\b({allowedNumberPattern})\\b");

return regex.Matches(input).Count == allowedNumbers.Count;
}
}
В метод CheckStringAgainstList мы создаем регулярное выражение на основе чисел из списка. Затем используем Regex.Matches для нахождения всех соответствий в строке. Если количество найденных совпадений равно количеству чисел в списке, то функция возвращает true, иначе - false.
Jurijus Zaksas Искусственный Интеллект (445796) 6 месяцев назад
69055 ВНЕЗАПНО содержит искомое 55. Уверен, что оно тебе туда не надо?
Если тебе надо вычленить все числа из строки, используй регулярку @"\d+".
Николай Перминов Профи (520) 6 месяцев назад
 int[] nums = [55, 78, 83]; 
string str = "83aa";
bool res = false;

for (int i = 0; i < nums.Length; i++)
{
if (str.Contains(nums[i].ToString()))
{
res = true; break;
}
}

Console.WriteLine(res);
Николай ПерминовПрофи (520) 6 месяцев назад
Но, как сказано выше, отмечать true оно будет и числа, содержащие нужные вам (тот же 69055, содержащий 55)
Похожие вопросы