2016-05-07 3 views
1

я хочу, чтобы удалить все между [] и()Хранить только определенную часть, которая находится между кронштейнами и удалить все остальные из них

Образцы:
ST Действие Выпуск 08 (1988-12) (GollnerPublishing Ltd)
ST Журнал 070 (1993-03) (La Terre дю Milieu) (фр)
20000 лье под водой (1988) (Coktel Vision) [вк Big 4]
День на скачках (1989) (Team) (Диск 1 из 2) [cr MCA]

Мое регулярное выражение: [^a-zA-Z\s\d][\d-()A-Za-z\] ]+

Это работает, единственный улов в том, что мне нужно сохранить его: (Диск 1 из 2). Таким образом, в последнем примере это было бы примерно так: День на гонках (Диск 1 из 2)

Я не могу найти способ исключить (Disk 1 of 2) (т. Е. «Не совпадать») и интегрировать его во всем выражении.

ответ

1

Вы можете использовать отрицательный предпросмотр (?![([]Disk 1 of 2[\])]), что позволит избежать соответствия (Disk 1 of 2) или [Disk 1 of 2]:

(?![([]Disk 1 of 2[\])])(?:\([^()]*\)|\[[^\][]*]) 

Смотрите regex demo

(?:\([^()]*\)|\[[^\][]*]) часть просто соответствует либо строку между круглыми скобками (скобки), не содержащие круглые скобки внутри (\([^()]*\)) или (|) строка внутри квадратных скобок, не содержащая квадратных скобок внутри (\[[^\][]*]).

Если 1 и 2 являются динамическими и стоят для целых чисел, используйте \d+: (?![([]Disk \d+ of \d+[\])])

+0

Он отлично работает, конечно, но немного слишком сложным для меня. Разве нет более простого способа сделать это (может быть, это будет выглядеть больше для моего исходного регулярного выражения)? Кажется, я понимаю, что часть «Матч если суффикс отсутствует», но я не могу заставить ее работать. – ene

+0

Возможно, вы могли бы просто указать мне язык, на котором вы его используете? –

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

  • Нет связанных вопросов^_^