Шаблон регулярного выражения для полного соответствия имен файлов - PullRequest
0 голосов
/ 20 января 2020

Я перебираю массив имен файлов изображений, которые указаны ниже:

  1. ConImage1 - Core.png
  2. ConImage211 - Core.png
  3. ConImage34 - Core.png
  4. ConImage09 - Core.png
  5. ConImage11 - Core.png
  6. ConImageOri23.png
  7. ConImageOri2.png
  8. ConImageOri11 .png
  9. ConImageOri132.png
  10. ConImageForEng7 - Core.png
  11. ConImageForEng12 - Core.png
  12. ConImageForEng11 - Core.png
  13. ConImageForEng10 - Core.png
  14. ConImage1-Dislikes-Core.png
  15. ConImage1-Likes-Core.png
  16. ConImage12 - Не нравится - Core.png
  17. ConImage12 - Likes - Core.png
  18. ConImage34 - Не нравится - Core.png
  19. ConImage34 - Likes - Core.png
  20. ConImage55 - Не нравится - Core.png
  21. ConImage55 - Likes - Core.png

Мне нужен шаблон Regex, который будет соответствовать только следующим именам файлов:

  1. ConImage1 - Core.png * 10 50 *
  2. ConImage211 - Core.png
  3. ConImage34 - Core.png
  4. ConImage09 - Core.png
  5. ConImage11 - Core.png

  6. ConImageOri23.png

  7. ConImageOri2.png
  8. ConImageOri11.png
  9. ConImageOri132.png

и исключить имена файлов, содержащие слова: Likes, Dislikes, ForEng et c.

Edit:

Я не очень хорош в регулярных выражениях, но пытаюсь что-то вроде этого, чтобы ограничьте мой поиск.

^(ConImage|(Orig|!ForEng)){1}[0-9\ \-]+[\W(Dislikes|Likes)][0-9\ \-]+(Core\.png)$/i/g

ИЛИ ниже работает для поиска необходимых файлов, но если появляется какое-то нечетное имя, например, ConImageMaxx12 - Core.png et c, оно также подхватывает это.

^ConImage((?!ForEng|Dislikes|Likes).)*$

Я не хочу реализовывать функцию VBA.Filter, но мне нужно решение Regex.

Любая помощь будет наиболее ценной.

1 Ответ

1 голос
/ 21 января 2020

Без специальных правил c трудно придумать регулярное выражение. Чтобы соответствовать указанным вами c значениям, которые вы опубликовали (и исключить ConImageMaxx12, который вы упомянули в комментарии), вы можете попробовать:

Редактировать , чтобы исправить пропущенное "начало строки" "token

^ConImage(?:Ori)?\d+(?:(?!(?:For|Likes)).)*$

Это регулярное выражение соответствует:

  • ConImage
  • необязательно соответствует Ori
  • соответствует одной или нескольким цифрам
  • , а затем сопоставляет остальную часть строки, если она не содержит подстроки в отрицательном прогнозе (который будет включать ForEng, Likes, Dislikes и другие производные)

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

Вот более формальное объяснение Regex с некоторыми ссылками на объяснение учебника:

Обратите внимание, что в соответствии с вашими комментариями мы устанавливаем параметр без учета регистра

Соответствие спецификации c Имена файлов

^ConImage(?:Ori)?\d+(?:(?!(?:For|Likes)).)*$

Опции: без учета регистра; ^ $ совпадение при разрыве строки

Создано с помощью RegexBuddy

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