搜索名称中包含特定数字的文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搜索名称中包含特定数字的文件相关的知识,希望对你有一定的参考价值。

我有成千上万的文件与各种目录。所有包含数字的文件名(如abc 2354,nfg 8239 sdf,abc 23,qwe 23)等等。我想搜索名称只包含(23)的文件。

我尝试了很多搜索模式,但结果都是一样的。这是我的代码:

var files = Directory.EnumerateFiles(pathh, "*.doc", SearchOption.AllDirectories).Where(p => p.Contains(searchword));
            foreach (string file in files)
            
                if (File.Exists(file))
                
                    listBox1.Items.Add(Path.GetFileNameWithoutExtension(file));
                
            

所以结果必须是(abc 23,qwe 23),但它返回的所有名字都包含23个像(abc 2354,nfg 8239 sdf,abc 23,qwe 23)!!

答案

您可能想尝试一个更简单和完整的示例。下面我输出到控制台,但您可以轻松地将其更改回来以满足您的需要。

最大的想法是我引入正则表达式来避免单词被小数字包围的命中。

var path = @"some path here";
var searchWord = "23";

var regex = new Regex($@"[^0-9]searchWord[^0-9]");

var files = 
    Directory.EnumerateFiles(path, "*.doc", SearchOption.AllDirectories)
    .Where(p => regex.Match(p).Success);

foreach (string file in files) 
    if (File.Exists(file)) 
        Console.WriteLine(Path.GetFileNameWithoutExtension(file));
    
   

这假设有一点宽松的要求。数字23不能在更大的数字内嵌入。如果您真的不希望在路径中的任何位置出现其他数字,请尝试使用此正则表达式:

var regex = new Regex($@"^[^0-9]*searchWord[^0-9]+$");

如果您希望在文件级别进行此限制,而不是在路径级别,请将linq where语句更改为以下内容:

.Where(p => regex.Match(Path.GetFileNameWithoutExtension(p)).Success);

以上是关于搜索名称中包含特定数字的文件的主要内容,如果未能解决你的问题,请参考以下文章

NSPredicate 在包含数字和字母的字符串中包含搜索

SQL如何查找和删除MYSQL数据库中包含特定字符串的记录

Python数据框-如何选择名称中包含特定子字符串的所有列[重复]

用户名包含Twitter API使用Java中的特定单词

文件夹中包含名称过长的项目,如何删除

Python 3,如果列表中包含特定的东西,如何删除部分元素3 [重复]