Создание регулярного выражения с промежуточным UUID для модульного тестирования? - PullRequest
1 голос
/ 17 марта 2020

У меня есть уникальный генератор имен файлов и я борюсь с шаблоном REGEX. В своем модульном тесте я хочу подтвердить, что выходная строка действительна:

    private static final String FILE_NAME_DELIMITER = "-";
    private static final Supplier<String> getRandomUUID = () ->
            UUID.randomUUID().toString().replace(FILE_NAME_DELIMITER, "");

Вот как генерируется UUID.

Это строка вывода filePrefix-yyyyMMdd-UUID.csv.gz

Регулярное выражение, которое я ищу: any_length_alpha_numeric_prefix-yyyyMMdd-UUID.extensionType.gz

  • any_length_alpha_numeric_prefix = любые буквы или цифры переменной длины
  • yyyyMMdd = этот формат даты должен существовать в этом месте
  • UUID = UUID, сгенерированный из вышеуказанного кода
  • extensionType.gz = должен быть .csv.gz

1 Ответ

0 голосов
/ 17 марта 2020

Вы хотите сопоставить , чтобы проверить, отформатировано ли имя файла, как ожидалось, или извлечь дату и UUID из имени файла?

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

.*-[0-9]{8}-[0-9a-f]{32}\.[^.]+\.gz

(Новое в регулярном выражении? Имейте в виду, что эти обратные слеши требуются самим регулярным выражением, но не компилятором java. В современных IDE дополнительные обратные слэши должен автоматически добавляться при вставке в ваш код. Если нет, замените любые \ на \\.)

Объясните:

  1. Соответствие any_length_alpha_numeric_prefix и разделитель: .* для произвольного содержимого и - для самого себя. . в регулярном выражении соответствует чему угодно.

  2. yyyyMMdd и разделитель: здесь мы используем [0-9]{8}- для простоты, чтобы соответствовать любым 8 цифрам вместо строго допустимых дат. Для строгой проверки даты в Inte rnet.

  3. есть много значений: для UUID и точки: UUID составляет 32 символа (0 ~ f шестнадцатеричных цифр) без разделителей. Так что [0-9a-f]{32} будет достаточно. Затем \., точка экранируется, поэтому теперь она совпадает.

  4. extensionType: Мы предполагаем, что это произвольная последовательность без точек. Поэтому мы используем [^.]+, чтобы соответствовать одному или нескольким точечным символам. Вы также можете жестко закодировать его в csv вместо этого, если известно, что все файлы являются CSV-файлами.

  5. Расширение .gz: Используйте \.gz.

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