Я бы порекомендовал вам полностью отказаться от регулярных выражений - просто слишком сложно заставить его работать в подобных случаях. Не все можно легко решить с помощью регулярных выражений! В этом случае большинство языков сценариев могут сделать это довольно легко. Я написал фрагмент JavaScript для вас здесь - просто введите разделители и введите, и нажмите кнопку Отправить.
Что касается объяснения: он разделяется по начальному разделителю, затем для каждого «блока» он разделяется по конечному разделителю. Мы заканчиваем блоком текста, который находится между началом и концом, и выполняем замену этого. Затем мы снова соединяем блоки. Это не самый эффективный способ, но он немного проще, чем обработка отдельных символов.

Старое, частично работающее, регулярное выражение лежит ниже. Я сильно рекомендую вам не использовать его.
Быстрый ответ: не используйте Notepad++, используйте этот фрагмент JS (введите текст справа внизу и нажмите «Отправить»). Замените START и END в сценарии слева внизу, если необходимо.
Кроме того, вы можете использовать PowerShell, который является родным для Windows (Vista+):
Get-Content input.txt | %{ $_ -replace "(?<=START.*?)-(?=.*?END)", " " } | Out-File output.txt
Замените input.txt и output.txt соответственно. Примечание: они должны быть разными файлами.
Это конкретное решение работает без ошибок, только если у вас есть только одно вхождение START на строку и одно вхождение END на строку, и они не охватывают строки - поэтому мы можем работать с каждой строкой независимо.
Учитывая гарантии, что для каждой строки потребуется только одно совпадение, и каждое совпадение содержится в строке, совпадающей с (?<=START.*?)-(?=.*?END) и замена на один пробел будет работать - за исключением того, что Notepad++, похоже, не нравится этот конкретный шаблон. Он поддерживает lookbehinds и lookaheads (очевидно, полный PCRE), но в этом есть что-то, что его сбивает с толку.
Альтернатива, которая аналогична тому, что Йоханнес уже ответил, заключается в использовании простого шаблона: (START.*?)-(.*?END) и замените его на \1 \2 . Проблема здесь в том, что это будет соответствовать только одному дефису на строку за раз. Это быстро становится утомительным.
Здесь мы пытаемся использовать более полный язык сценариев. JavaScript - хорошая альтернатива. Тем не менее, он не поддерживает внешний вид. С другой стороны, мы можем запускать циклы, так что предыдущее утомительное решение действительно жизнеспособно. Я создал пример здесь.