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

时间:2018-10-08 08:49:19

标签: c# regex wpf wildcard selection

我想选择所有在星号为:精确为4个“未知”字符的文档(例如,“ ****”可以为“ 2018”)

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

我知道星号*会匹配每个字符,无论星号之间有多少个字符。但是如上所述,我只想选择带有特定数量未知字符的结果。

1 个答案:

答案 0 :(得分:2)

您不能在path参数中指定通配符,需要提供路径和搜索模式,请参见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模式的XML文件。