Используйте String.Format для создания регулярного выражения - PullRequest
2 голосов
/ 12 марта 2019

По сути, у меня есть строка для интерполяции: Log_{0}.txt и {0} заменяется целым числом во время другого процесса. Таким образом, результаты могут быть что-то вроде Log_123.txt или Log_53623432.txt.

Я пытаюсь использовать string.Format() и заменить {0} регулярным выражением, которое проверяет числа. В конце концов я тоже хочу получить эти цифры.

Я пробовал несколько разных вариантов чего-то подобного, но мне не повезло:

var stringFormat = new Regex(string.Format("Log_{0}.txt", @"^\d$"));

Кроме того, вот код, который проверяет формат:

        var fileNameFormat = new Regex(string.Format("Log_{0}.txt", @"^\d+$"));

        var existingFiles = Directory.GetFiles("c:\\projects\\something");

        foreach(var file in existingFiles)
        {
            var fileName = Path.GetFileName(file);
            if(fileNameFormat.Match(fileName).Success)
            {
                // do something here
            }              
        }

Ответы [ 2 ]

5 голосов
/ 12 марта 2019

Проблема в вашем регулярном выражении.^ подтверждает начало строки и $ конец строки.Просто замените его на @"\d+", и оно должно работать.

При желании вы можете использовать new Regex(string.Format("^Log_{0}.txt$", @"\d+"));, чтобы убедиться, что никакие файлы, такие как asdffff_Log_13255.txt.temp не совпадают.

0 голосов
/ 12 марта 2019

Вы забыли поставить квантификатор плюс +, может быть?

+ Квантификатор - сопоставляет от одного до неограниченного количества раз, столько раз, сколько возможно, отдавая при необходимости (жадный)

var stringFormat = new Regex(string.Format("Log_{0}.txt", @"^\d+$"));
...