Регулярное выражение для замены шаблона во время выполнения (C # 3.0) - PullRequest
1 голос
/ 02 мая 2010

У меня есть требование.

У меня есть несколько файлов в папке, среди которых некоторые имена файлов похожи, скажем,

**EUDataFiles20100503.txt, MigrateFiles20101006.txt.**

В основном это файлы, с которыми мне нужно работать.

Теперь у меня есть файл конфигурации, где он упоминается как тип шаблона файла как

EUDataFilesYYYYMMDD, MigrateFilesYYYYMMDD .

По сути, идея заключается в том, что пользователь может настроить шаблон файла, и на основе указанного шаблона мне нужно искать те файлы, которые присутствуют в папке.

т.е. во время выполнения ГГГГММДД будет заменено значениями Месяц года и Дата . Неважно, какие даты будут там (но не с отметкой времени; только даты)).

И там будут имена EUDataFiles или MigrateFiles (они фиксированные)

т.е. Если папка имеет имя файла EUDataFile20100504.txt (т. Е. Год 2010, месяц 05, день 04), я должен игнорировать этот файл, поскольку он не EUDataFiles20100504.txt (примите к сведению, что это имя во множественном числе - файл (ы), а не файл, для которого система будет игнорировать файл).

Аналогичным образом, если шаблон задан как EUDataFilesYYYYMMDD и если присутствующий файл имеет тип EUDataFilesYYYYDDMM, то система также должна игнорировать.

Как я могу решить эту проблему? Это выполнимо с помощью регулярного выражения (Замена шаблона во время выполнения)?

Если так, то может ли кто-нибудь быть достаточно хорошим, чтобы помочь мне?

Я использую C # 3.0 и dotnet framework 3.5.

Спасибо

1 Ответ

1 голос
/ 02 мая 2010

Вы можете создать регулярное выражение из вашего основного имени файла плюс (в зависимости от шаблона) суб-регулярные выражения.

Суб-регулярные выражения могут быть

 yyyy = @"\d{4}"

(если вы не хотите ограничить определенный годовой диапазон)

* +1007 *

Создайте свое регулярное выражение, добавив их в правильном порядке:

 re = @"\AEUDataFiles" + yyyy + mm + dd + @"\.txt\Z"

Затем вы можете проверить, соответствуют ли найденные вами имена файлов регулярному выражению:

foundMatch = Regex.IsMatch(subjectString, re);

Конечно, это не проверка правильности дат (пройдет 20100231), но в этом случае это, вероятно, не проблема.

...