c# - 搜索名称包含特定数字的文件
问题描述
我有数千个包含各种目录的文件。所有文件名都包含 (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);
推荐阅读
- sql - How to add multiple select statement one bcp command in SQL Server
- file - collecting tweets using tweepy cursor
- typescript - 如何使用 Chrome DevTools 为 .NET Core Web 应用程序调试我的 typescript 页面?
- c# - 如何从 MVC 中的对象列表中添加和显示数据?
- http - Http-Headers 的 Case-Style 有名称吗?
- spring-boot - 在任何 api 失败时丰富 prometheus 响应
- unity3d - 当一个游戏对象转动时,当我把一个对象放在上面时。那个物体没有像它应该的那样旋转,如何解决这个问题?
- google-sheets - 如何使用水平和垂直标准(包括日期)进行 SUMIF?
- javascript - How do I use a template literal in a regular expression?
- python - How to use width and fill option without using it in every bracket?