#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 расширения», основанные на этом правиле.