特定数量字符的 C# 通配符

C# Wildcard for specific amount of characters

我想 select 所有在星号所在的位置 确切 4 "unknown" 个字符的文档:(例如“** **”可能是“2018”)

foreach (string s in Directory.GetFiles(@"C:\Users\MyUser\Documents\ExampleTitle ****.xml").Select(Path.GetFileName))
{
    // Do something!
}

我知道星号 * 将匹配每个字符,无论星号之间有多少个字符。但正如所描述的,我希望 select 仅具有特定数量的未知字符的结果。

您不能在路径参数中指定通配符,您需要提供路径和搜索模式,参见GetFiles(String, String)

搜索模式接受两个通配符,? 用于单个字符,* 用于任意数量的字符。因此,你需要

Directory.GetFiles(@"C:\Users\MyUser\Documents", "ExampleTitle ????.xml")

如果您打算只匹配数字,则必须使用正则表达式来过滤 Directory.GetFiles:

的结果
var fileList = Directory.GetFiles(@"C:\Users\MyUser\Documents", "*.xml")
        .Where(p => Regex.IsMatch(Path.GetFileName(p), @"^ExampleTitle [0-9]{4}\.xml$"))
        .ToList();

此处,Directory.GetFiles(@"C:\Users\MyUser\Documents", "*.xml") 将获取给定文件夹中的所有 XML 文件,那些完全匹配 ExampleTitle <4-DIGITS>.xml 模式的文件将通过 Where 子句返回.