2012-05-19 5 views
0

Я использую регулярное выражение для имен файлов изображений. Основная причина, по которой я использую RegEx, заключается в предотвращении нескольких файлов для той же цели.Специальный синтаксис регулярного выражения в Java

Синтаксис для имен файлов может быть либо:

1) img_0F_16_-32_0.png 
2) img_65_32_x.png 

Как вы могли заметить, «IMG_» является общим префиксом. Далее следует двузначное шестнадцатеричное число. После другого подчеркивания появляется целое число, которое должно быть силой двух, где-то между 1 и 512. Еще одно подчеркивание следующее.

Хорошо, так что, мое регулярное выражение работает безупречно. Остальное - это то, с чем у меня возникают проблемы: Потому что может следовать либо пара целых координат (может быть 0), разделенных символом подчеркивания, либо x. После этого наступает финальный «.png». Готово.

Теперь главная проблема, которую я испытываю, заключается в том, что оба варианта должны быть возможны, , а также очень важно, чтобы не было дублирующих координат. Самое главное, целые числа, как положительные, так и отрицательные, могут never начать с одного или нескольких нулей! Это будет производить дупликации, как:

401 = 00401 
-10 = -0010 

Это моя первая попытка:

img_[0-9a-fA-F]{2}_(1|2|4|8|16|32|64|128|256|512)_([-]?[1-9])?[0-9]*_([-]?[1-9])?[0-9]*[.]png 

Спасибо за вашу помощь заранее,

Том С.

ответ

3

Зачем использовать регулярные выражения? Почему бы не создать класс, который делит любой вариант String на каноническую String, дать классу метод hashCode() и equals(), который использует эту каноническую строку, а затем создать HashSet этих объектов, чтобы убедиться, что существует только один из этих типов файлов?

+1

+1. Я нахожу, что код разбора строк часто быстрее писать, легче понять и легче отлаживать, если вы просто пишете его как обычный код, а не пытаетесь использовать регулярное выражение для каждой цели. –

+0

На самом деле, я использую регулярное выражение в фильтре имени файла. это важно, потому что каталог, в который я загружаю файлы, содержит примерно ~ 2500 файлов. –

+1

Если вы имеете дело с этим количеством файлов, у вас есть еще одна причина не использовать регулярное выражение. Это медленнее, чем простой парсер. – BalusC

Смежные вопросы