Использование Regex для поиска ключевого слова в имени файла работает неправильно ⇐ C#
-
Гость
Использование Regex для поиска ключевого слова в имени файла работает неправильно
Я пытаюсь использовать регулярное выражение для поиска ключевого слова в имени файла. Однако по большей части он работает. Он также находит файлы, у которых ключевое слово не указано нигде в пути или имени файла. Я не уверен, почему они включены.
Не обязательно, чтобы слова пути совпадали с ключевым словом, я просто указал на это. Я могу понять, почему файлы отображаются в списке.
Я попробовал код, указанный ниже
foreach(var f в файлах) { Файлысканед++ FilesScanedTxtBlk.Text = FilesScanned.ToString(); foreach (var v в SearchTerms) { if(System.Text.RegularExpressions.Regex.IsMatch(f.file, $"\\s{v}\\s", System.Text.RegularExpressions.RegexOptions.IgnoreCase)) { Результаты.Добавить(f.Files, v); ФайлыНайдено++; } } } Обновление: Вот полный блок кода.
public void ScanForFiles(/*BackgroundWorker bgw, DoWorkEventArgs e*/ ) { Scan_btn.IsEnabled = ложь; ResetBtn.IsEnabled = правда; пытаться { строка docPath = DriveSelectionCB.SelectedItem.ToString(); Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); var files = из файла в Directory.EnumerateFiles(docPath, "*.*", SearchOption.AllDirectories) выбрать новый { Файл = файл }; foreach (var f в файлах) { Файлысканед++; FilesScannedTxtBlk.Text = FilesScanned.ToString(); foreach (var v в SearchTerms) { if (System.Text.RegularExpressions.Regex.IsMatch(f.File, $"\\b{v}\\b" ,System.Text.RegularExpressions.RegexOptions.IgnoreCase))//$"\\s{v} \\s" { Результаты.Добавить(f.File, v); ФайлыНайдено++; } } } GenReportBtn.IsEnabled = правда; FilesFoundTxtBlk.Text = FilesFound.ToString(); } улов (UnauthorizedAccessException uAEx) { Console.WriteLine(uAEx.Message); } поймать (PathTooLongException pathEx) { Console.WriteLine(pathEx.Message); } улов (IOException ioEx) { Console.WriteLine(ioEx.Message); } СоздатьРезультаты(); }
Я пытаюсь использовать регулярное выражение для поиска ключевого слова в имени файла. Однако по большей части он работает. Он также находит файлы, у которых ключевое слово не указано нигде в пути или имени файла. Я не уверен, почему они включены.
Не обязательно, чтобы слова пути совпадали с ключевым словом, я просто указал на это. Я могу понять, почему файлы отображаются в списке.
Я попробовал код, указанный ниже
foreach(var f в файлах) { Файлысканед++ FilesScanedTxtBlk.Text = FilesScanned.ToString(); foreach (var v в SearchTerms) { if(System.Text.RegularExpressions.Regex.IsMatch(f.file, $"\\s{v}\\s", System.Text.RegularExpressions.RegexOptions.IgnoreCase)) { Результаты.Добавить(f.Files, v); ФайлыНайдено++; } } } Обновление: Вот полный блок кода.
public void ScanForFiles(/*BackgroundWorker bgw, DoWorkEventArgs e*/ ) { Scan_btn.IsEnabled = ложь; ResetBtn.IsEnabled = правда; пытаться { строка docPath = DriveSelectionCB.SelectedItem.ToString(); Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); var files = из файла в Directory.EnumerateFiles(docPath, "*.*", SearchOption.AllDirectories) выбрать новый { Файл = файл }; foreach (var f в файлах) { Файлысканед++; FilesScannedTxtBlk.Text = FilesScanned.ToString(); foreach (var v в SearchTerms) { if (System.Text.RegularExpressions.Regex.IsMatch(f.File, $"\\b{v}\\b" ,System.Text.RegularExpressions.RegexOptions.IgnoreCase))//$"\\s{v} \\s" { Результаты.Добавить(f.File, v); ФайлыНайдено++; } } } GenReportBtn.IsEnabled = правда; FilesFoundTxtBlk.Text = FilesFound.ToString(); } улов (UnauthorizedAccessException uAEx) { Console.WriteLine(uAEx.Message); } поймать (PathTooLongException pathEx) { Console.WriteLine(pathEx.Message); } улов (IOException ioEx) { Console.WriteLine(ioEx.Message); } СоздатьРезультаты(); }
Мобильная версия