c# - 需要根据输入文件号查找确切的文件名列表
问题描述
我需要根据我输入的文件编号制作一个图像文件列表。我只能找到具有该文件编号的图像文件,即使图像文件之前和/或之后可能具有相同的字符。因此,我试图根据文件编号在文件夹结构中定位一些图像文件。因此,如果文件编号是“00441”,我需要找到编号如下的文件:
IM00441_000A.jpg
IM00441_205A.jpg
IM00441_110D.jpg
IM00441_A11.jpg
因此,如果每个图像文件都有像这些示例一样的下划线,这将不是问题,但是,有些没有下划线。并且有些文件编号具有后缀,例如我们有 '00441' 和 '00441A' 所以,除了上面列出的图像文件之外,我可能还有:
IM00441A_000A.JPG
IM00441A_105A.JPG
IM00441A_110A.JPG
IM00441A_302A.JPG
因此,由于这些问题,我不能在下划线处中断,也不能使用 StartsWith(如下面的代码),因为所有这些示例都以“00441”开头,只是有些以“A”结尾。这是我到目前为止的代码,但由于我之前所说的,它不起作用。
LocalFile = "IM" + FileNumber;
if (ValidateFilepath(di))
lstDocuments = di.GetFiles("*.jpg")
.Where(file => file.Name.ToUpperInvariant().StartsWith(LocalFile))
.Select(file => file.FullName).ToList(); // The ToUpperInvariant() makes the file name upper case, because the actual file names are not consistent.
解决方案
我建议为此使用正则表达式。
这是一个示例(00441
将pattern
变量中的 替换为您要搜索的文件名):
using System.Text.RegularExpressions;
// ...
var files = new List<string>
{
"IM00441_000A.jpg",
"IM00441_205A.jpg",
"IM00441_110D.jpg",
"IM00441_A11.jpg",
"IM00441A_000A.JPG",
"IM00441A_105A.JPG",
"IM00441A_110A.JPG",
"IM00441A_302A.JPG",
"IM00123_123A.jpg",
"IM00123A_123B.jpg",
"AIM00123_123C.jpg",
"IM00456_123A.jpg",
"IM00456A_123B.jpg",
"AIM00456_123C.jpg"
};
var pattern = @".+00441.*\.[jpg|JPG]";
foreach (var file in files)
{
if (Regex.IsMatch(file, pattern))
Console.WriteLine($"Found file: {file}");
}
// Output:
// Found file: IM00441_000A.jpg
// Found file: IM00441_205A.jpg
// Found file: IM00441_110D.jpg
// Found file: IM00441_A11.jpg
// Found file: IM00441A_000A.JPG
// Found file: IM00441A_105A.JPG
// Found file: IM00441A_110A.JPG
// Found file: IM00441A_302A.JPG
推荐阅读
- python - 为什么我的输出结果应该在 Python 中以相反的顺序显示确切的数字时不显示 0。不将参数变量更改为字符串
- python - Selenium webdriver - 使用特定 Chrome 配置文件时忽略首选项
- c# - 如何使用实体框架选择 2 列?
- c# - 从 Azure Blob C# 下载图像
- kubernetes - 尽管我们的工作已经完成,但 Kubernets 部署尚未完成:'未就绪状态的容器:[main]'
- javascript - 如何有效地在 wordpress 主题中包含 smoothState.js 或任何 JS 库
- python - NumPy:沿矩阵的对角线构造正方形/扩展对角矩阵
- turtle-graphics - 如何从浏览器执行服务器中的代码
- powershell - “code”命令在 Windows 11 上不起作用,尽管它在 PATH 中
- c - KeAcquireSpinLock 执行时间长