搜索名称中包含特定数字的文件
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);
以上是关于搜索名称中包含特定数字的文件的主要内容,如果未能解决你的问题,请参考以下文章