Шаблон регулярного выражения Java, который будет использоваться в FileNameFilter для исключения определенных файлов

Я хочу исключить все файлы в каталоге с именем файла в форме [.*].[a-z]{3,4}.bak. Если имя файла, например, «hello.txt» или «hello.xlsx», его следует включить. Я создал шаблон ^([^.]+)(\\.)([a-z]{3,4})$, который, кажется, правильно работает для моего случая, но мне нужно убедиться в правильности приведенного выше шаблона. Пожалуйста, дайте мне знать, есть ли лучший шаблон для обработки этого сценария.

Действительный случай (файлы должны быть включены):

  • Привет.xls
  • привет.xlsx

Недопустимый случай (файлы должны быть исключены)

  • привет.txt.bak
  • привет.xlsx.bak

Почему у вас нет .bak в конце регулярного выражения? Также, пожалуйста, разместите несколько действительных/недействительных образцов.

Pushpesh Kumar Rajwanshi 03.03.2019 19:44

Используйте инструменты для проверка регулярных выражений и напишите unit tests.

Michał Ziober 03.03.2019 19:49

Вы рассматривали что-то вроде filename.endsWith('.bak') ?

khelwood 03.03.2019 19:49

@khelwood Реализация FileNameFilter использует name.matches и не может быть изменена

Mohit Shrivastava 03.03.2019 20:00

@PushpeshKumarRajwanshi Действительный случай (файлы должны быть включены) Hello.xls hello.xlsx Недопустимый случай (файлы должны быть исключены) hello.txt.bak hello.xlsx.bak

Mohit Shrivastava 03.03.2019 20:09
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
4
5
77
1

Ответы 1

Это сработало для меня

^[^.]+.[A-z]{3,4}(?!.*.bak)

Спасибо Michal Ziober за инструмент.

https://regex101.com/r/HBVs2p/3

[A-z] содержит не только буквы, взгляните на таблицу ASCII, чтобы увидеть, что находится между Z и a
Toto 06.03.2019 13:56

Другие вопросы по теме