Фильтрация имен файлов с двумя или более расширениями файлов

#c# #string

#c# #строка

Вопрос:

у меня есть тысячи имен файлов в виде строк, и я хочу отфильтровать имена файлов с двумя или более расширениями файлов в C #.

Пример:

  • pic.jpng
  • pic_21.03.2007_.jpng
  • manuel.pdf
  • manuel.pdf.exe …. это я хочу отфильтровать!
  • pic_3.jpng

Как можно выполнить поиск строк с двумя или более расширениями файлов в имени файла?

Комментарии:

1. jpng! Поздравляем, вы только что изобрели новый формат изображения! 🙂

2. Первый шаг — определить, что является расширением, а что нет. Из ваших примеров видно, что «pdf» является расширением, а «03» и «2007_» — нет. Итак, какое правило определяет, является ли это расширением?

3. Хорошим правилом может быть следующее: последняя часть всегда является расширением. Предыдущие части считаются расширениями только в том случае, если они не содержат чисел и если их длина не превышает 4.

4. yourList.Where(x => x.Spit('.').Length > 2).ToList();

5. если они не содержат чисел и если их длина не превышает 4 , звучит довольно произвольно. track01.mp3.original

Ответ №1:

Если под расширениями файлов вы подразумеваете количество точек в имени файла, вы можете просто посчитать символ ‘.’ в каждом имени файла. Например:

 var myFilenames = new[] { "pic.jpng", "manuel.pdf", "manuel.pdf.exe" };
var twoOrMoreExtensions = myFilenames.Where(f => f.Count(x => x == '.') >= 2);
foreach (var filename in twoOrMoreExtensions)
{
    Console.WriteLine(filename);
}
  

Запишет:

manuel.pdf.exe

Однако, как было указано в комментариях, если вы включите pic_21.03.2007_.jpng , это будет иметь «3 расширения», основанные на этом правиле.