C # Подстановочный знак для определенного количества символов - PullRequest
0 голосов
/ 08 октября 2018

Я хотел бы выбрать все документы, которые имеют точные 4 "неизвестных" символа в месте, где звездочка: (например, "****" может быть "2018")

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

Я знаю, что звездочка * будет соответствовать каждому символу, независимо от того, сколько символов находится между звездочкой.Но, как описано, я хочу выбрать только результаты с определенным количеством неизвестных символов.

1 Ответ

0 голосов
/ 08 октября 2018

Нельзя указывать подстановочные знаки в аргументе пути, необходимо указать путь и шаблон поиска, см. 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.

...