I would recommend you abandon regex entirely - it is simply too much trouble to get it to work in cases like this. Not everything can be solved easily with regex! In this case, most scripting languages can do this fairly easily. I've written a piece of JavaScript for you, here - just enter your delimiters and input, and click submit.
As for an explanation: it splits by the start delimiter, then for each 'block' it splits by the end delimiter. We end up with a block of text that is in between a start and end, and perform a replacement on that. Then we join the split blocks back together. That's not the most efficient way, but it's a bit easier than processing individual characters.

Old, partially working, regex solution lies below. I heavily recommend you do not use it.
Quick answer: don't use Notepad++, use this JS snippet (enter your text at the bottom right and click submit). Replace START
and END
in the script to the bottom left as necessary.
Alternatively, you can use PowerShell, which is native to Windows (Vista+):
Get-Content input.txt | %{ $_ -replace "(?<=START.*?)-(?=.*?END)", " " } | Out-File output.txt
Replace input.txt
and output.txt
accordingly. Note: they must be different files.
This particular solution only works without bugs if you have only one occurrence of START
per line and one occurrence of END
per line and they do not span lines - so we can deal with each line independently.
Given the guarantees that only one match will be needed per line, and each match is contained within a line, matching for (?<=START.*?)-(?=.*?END)
and replacing with a single space would work - except Notepad++ doesn't seem to like this particular pattern. It supports lookbehinds and lookaheads (full PCRE, apparently), but there's something about this that trips it up.
An alternative, which is similar to what Johannes has already answered, is to use a simple pattern: (START.*?)-(.*?END)
and replace it with \1 \2
. The problem here is this will only match one hyphen per line at a time. This quickly becomes tedious.
Here, we try to use a more complete scripting language. JavaScript is a good alternative. However, it doesn't support lookbehinds. On the plus side, we can run things in a loop, so the previous tedious solution is actually viable. I've created an example here.
START
andEND
per line, and that it will not span lines (i.e. there is never a newline betweenSTART
andEND
). – Bob Dec 7 '13 at 11:55