mart19 Ответов: 3

Языке C# регулярное выражение, чтобы проверить, если имя файла вышлет yymmdd.txt формат


YY от 0-99, MM от 1-12 и DD от 01-31

Regex.Match(fileName.ToLowerInvariant(), criteria.ToLowerInvariant());


критерии = ?

Что я уже пробовал:

^\d\d\/(0[1-9]|1[0-2])\/(0[1-9]|[12][0-9]|3[01]).txt$

ZurdoDev

Другой вариант-попытаться преобразовать в дату, если вы не хотите идти по пути регулярных выражений.

Patrice T

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

3 Ответов

Рейтинг:
26

phil.o

Ваше регулярное выражение не так уж далеко от истины; есть только два момента, которые необходимо рассмотреть:

- вам не нужно избегать косых черт (/); то есть они не нуждаются в префиксе обратной косой черты. Простая косая черта не имеет смысла в синтаксисе регулярных выражений.

- однако вам нужно избежать точки в расширении имени файла. Точка означает "любой символ".

Таким образом, возможный синтаксис будет следующим

string pattern = @"^\d\d(0[1-9]|1[0-2])(0[1-9]|[12][0-9]|3[01])\.txt$";

bool isValidFilename = Regex.IsMatch(
   filename,
   pattern,
   RegexOptions.Compiled | RegexOptions.IgnoreCase | RegexOptions.CultureInvariant
);
Вы можете прочитать больше об этом методе здесь[^].

Ключевые моменты для рассмотрения:

- Вероятно, лучше указать нечувствительный к регистру характер выражения с помощью правильного RegexOptions флаг.

- Узор, наоборот, должен никогда следует сделать строчные/прописные буквы, так как это может изменить его синтаксис и сделать его неправильным.

В качестве заключительного замечания я использую программное обеспечение Expresso, которое является бесплатным, для создания и тестирования регулярных выражений; это также удивительный способ узнать о синтаксисе регулярных выражений. Однако это не единственный существующий инструмент; многие пользователи на этом форуме часто предоставляют впечатляющий список инструментов регулярных выражений; вы можете найти их с помощью простого поиска "регулярных выражений" в разделе "быстрые ответы".

[Редактировать] Я забыл упомянуть, что даже если это позволит вам проверить формат имени файла, это не является правильной проверкой даты. Можно сопоставить такие значения, как 000931.txt (31 сентября) или 190229 (29 февраля для не високосного года). Если вы хотите убедиться, что дата является допустимой, то вам нужно будет получить числа (например, с группами, которые вы определили в своем выражении) и попытаться построить из них допустимую структуру DateTime. Ошибка будет помечать имя файла как содержащее недопустимую дату.

[Edit 2] читая решение 2, я замечаю, что только что предложил вам проверить недопустимое имя файла :( вы не можете иметь косые черты как часть имени файла. Я исправил регулярное выражение.


Patrice T

+5

BillWoodruff

+5

Maciej Los

5ed!

Рейтинг:
16

Patrice T

В дополнение к S1.

Цитата:
Языке C# регулярное выражение, чтобы проверить, если имя файла вышлет yymmdd.txt

Вы говорите, что хотите соответствовать yymmdd.txt но ваше регулярное выражение совпадает yy/mm/dd.txt.

Всего лишь несколько интересных ссылок, которые помогут построить и отладить регулярное выражение.
Вот ссылка на документацию по регулярным выражениям:
perlre - perldoc.perl.org[^]
Вот ссылки на инструменты, помогающие создавать регулярные выражения и отлаживать их:
.Объем тестер регулярное выражение - регулярное выражение шторм[^]
Регулярное Средство Выражения Эспрессо [^]
RegExr: Learn, Build, & Test RegEx[^]
Онлайн-тестер регулярных выражений и отладчик: PHP, PCRE, Python, Golang и JavaScript[^]
Этот пример показывает вам регулярное выражение в виде красивого графика, который действительно полезен для понимания того, что делает регулярное выражение: Debuggex: онлайн-тестер визуальных регулярных выражений. JavaScript, Python и PCRE.[^]
Этот сайт также показывает регулярное выражение в красивом графике, но не может проверить, что соответствует регулярному выражению: Regexper[^]


phil.o

Facepalm (за мою ошибку) :)

BillWoodruff

+5

Maciej Los

5ed!

Рейтинг:
11

Nacoumblé Olivier Martial Soro

^[0-9][0-9]([0-1][1-2])([0][1-9]|[1][0-9]|[2][0-9]|[3][0-1]).txt$