Regex - переименование файла с самым высоким разрешением в имени файла - PullRequest
3 голосов
/ 08 февраля 2020

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

Например, оригинальное незафиксированное имя файла выглядит так: 1080P,720P,480P,240P,_123456789.mp4

Я использую регулярное выражение для переименуйте этот файл примера в: 1080P_123456789.mp4.

Однако результат регулярного выражения, которое я сейчас использую .*(?=1080P|720P|480P|240P), не работает должным образом, он принимает самое низкое качество вместо самого высокого: 240P,_123456789.mp4

Правильные примеры:

1080P,720P,480P,240P,_0987654321.mp4  --> 1080P_0987654321.mp4
720P,480P,_0987654321.mp4             --> 720P_0987654321.mp4
480P,240P,_0987654321.mp4             --> 480P_0987654321.mp4

Неправильные примеры, которые дает мне регулярное выражение:

1080P,720P,480P,240P,_0987654321.mp4  --> 240P_0987654321.mp4
720P,480P,_0987654321.mp4             --> 480P_0987654321.mp4
480P,240P,_0987654321.mp4             --> 240P_0987654321.mp4

Редактировать: Решение

^.*?(1080P|720P|480P|240P).*?(_\d+\.mp4).*$
OR 
^.*?(\d+P).*?_(\d+\.mp4)\S*
OR
.*?(\d+P)[^.]*_(\d+\.mp4)\S*

Ответы [ 2 ]

2 голосов
/ 08 февраля 2020

Попробуйте это ^(1080P|720P|480P|240P).*,(.*). ^ будет соответствовать первому вхождению в строке.

1 голос
/ 08 февраля 2020

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

Затем сопоставьте любой символ, кроме символа подчеркивания, используя класс отрицательных символов, за которым следует знак подчеркивания: убедитесь, что оно есть.

\b(\d+P)\b[^_]*_

Объяснение

  • \b Граница слова
  • (\d+P) Группа захвата 1, соответствует 1+ цифры и P
  • \b Граница слова
  • [^_]*_ Совпадение 0+ раз с любым символом, кроме _, затем совпадение с _

Regex demo

При замене используйте первую группу захвата, за которой следует соответствующее подчеркивание, которое было частью совпадения и отсутствует в группе захвата.


Если вы также хотите удалить то, что стоит перед цифрами и P и после .mp4 с указанными c числами:

^.*?(1080P|720P|480P|240P).*?(_\d+\.mp4).*$

Regex demo

При замене используйте обе группы захвата $1$2

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