Шаблон RegEx для ограничения тире в этих обстоятельствах

сценарий

Я использую стороннее программное обеспечение для переименования файлов, написанное на Delphi и поддерживающее pascal-script:http://www.den4b.com/?x=products&product=renamer

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

проблема

Мне нужно отформатировать названия файлов песен, как показано ниже, в этих именах файлов "... с участием художникаmsgstr "часть находится справа от строки, мне нужно сопоставить ее и поместить в левую часть строки.

Carbin & Sirmark - Извините Подвиг. SevenerКристьян Кэш Кэш - Take Me Home Feat. Bebe Rexha (отозвать ремикс)

Чтобы сделать это простым для понимания, мы могли бы представитьтокенизировать имя файла, как это:

[0]ARTIST   [1]DASH   [2]TRACK   [3]FEAT_ARTIST   [4]POSSIBLE_ADDITIONAL_INFO_INSIDE:()[]{}

Затем, что мне нужно сделать с RegEx, это отформатировать имя файла для позиционированияжетоны в этом порядке:

[0]ARTIST   [3]FEAT_ARTIST   [1]DASH   [2]TRACK   [4]POSSIBLE_ADDITIONAL_INFO_INSIDE:()[]{}

Я действительно делаю это, используя этот RegEx:

\ A ([^ -]?) \ S- \ s * (.?) \ S([([]) ((Футы [\ s] |?. Подвигом [\ s] |.. Отличая [\ s]) [^ () {} []] *) ([)]]) (?. +)? \ Z

Замена на:

1 $ 4 - 2 $ 7

Проблема начинается здесь, потому что[0]ARTIST а также[2]TRACK токены могут содержать тире, например, это имя файла:

Dj E-nergy C-21 - мой трек супергероев! feat Dj Ass-hole

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

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

Вопрос

Взяв в качестве примера RegEx, который я показал выше, чтобы расширить / улучшить его, как я могу исключить имена файлов, которые содержат[0]ARTIST или[2]TRACK жетоны с тире?

... Или, другими словами, как я могу сказать моему RegEx, чтобы не изменять имя файла, когда имя файла содержит более 1 тиредо "... с участием художника"часть? (не после)

В основном, регулярное выражение должно определять,[1]DASH встречается более одного раза[3]FEAT_ARTIST, если да, то исключите это имя файла (не изменяйте его)

Я знаю, как ограничить появление группы Regex примерно так([\-]){1} чтобы соответствовать только 1 вхождению тире, но я не уверен, как реализовать это в выражении, которое я использую.

Ожидаемые результаты

Просто несколько случайных примеров ...

Один штрих только перед[3]FEAT_ARTIST так что мы можем знать, когда отделить[0]ARTIST от[2]TRACK жетоны.

От: 'Carbin & Sirmark - Извините Подвиг. Sevener'Кому: 'Carbin & Sirmark Feat. Sevener - Извините'

Один штрих только перед[3]FEAT_ARTIST так что мы можем знать, когда отделить[0]ARTIST от[2]TRACK жетоны. С[4]POSSIBLE_ADDITIONAL_INFO_INSIDE:()[]{}.

От: 'Услуги полета - Подвиг Сердечного приступа. Owl Eyes (Snakehips Remix)'Кому: 'Flight Facilities Feat. Сова Глаза - Сердечный приступ (Snixhips Remix)'

Один штрих только перед[3]FEAT_ARTIST так что мы можем знать, когда отделить[0]ARTIST от[2]TRACK жетоны. С[4]POSSIBLE_ADDITIONAL_INFO_INSIDE:()[]{} который также содержит тире.

От: 'Услуги полета - Подвиг Сердечного приступа. Сова Глаза [Змея - Бедра Ремикс]'Кому: 'Flight Facilities Feat. Сова Глаза - Сердечный приступ [Змея - Бедра Ремикс]'

Один штрих только между[0]ARTIST [2]TRACK токены, но имя файла не имеет[3]FEAT_ARTIST поэтому мы не трогаем это.

От: 'Федде Ле Гранд - Кинематографический'Кому: 'Федде Ле Гранд - Кинематографический'

Один штрих только между[0]ARTIST [2]TRACK жетоны, но[3]FEAT_ARTIST до[1]DASH поэтому мы не трогаем это.

От: 'Fedde Le Grand Feat. Денни Уайт - Кинематографический'Кому: 'Fedde Le Grand Feat. Денни Уайт - Кинематографический'

[0]ARTIST есть тире, поэтому мы не можем знать, когда отделить[0]ARTIST а также[2]TRACK токены, поэтому Regex должен исключить это, чтобы не изменять это имя файла.

От: 'Artist-Name - название трека'Кому: 'Artist-Name - название трека'

[2]TRACK есть тире, поэтому мы не можем знать, когда отделить[0]ARTIST а также[2]TRACK токены, поэтому Regex должен исключить это, чтобы не изменять это имя файла.

От: 'Имя исполнителя - Track-Name feat кто-то'Кому: 'Имя исполнителя - Track-Name feat кто-то'

[0]ARTIST а также[2]TRACK у токенов есть тире, поэтому мы не можем знать, когда их разделять, поэтому Regex должен исключить это, чтобы не изменять это имя файла.

От: 'Dj E-nergy C-21 - мой трек супергероев! feat Dj Ass-hole'Кому: 'Dj E-nergy C-21 - мой трек супергероев! feat Dj Ass-hole'

[0]ARTIST а также[2]TRACK токены имеют тире, а также[3]FEAT_ARTIST не существует, опять же здесь нечего делать.

От: 'Dj E-nergy C-21 - мой трек супергероев!'Кому: 'Dj E-nergy C-21 - мой трек супергероев!'

Я надеюсь, что это помогает понять, что мне нужно.

Ответы на вопрос(4)

Ваш ответ на вопрос