GO statements aren't needed.
var regex1 = new Regex(@"
(?s)
(create|alter|drop).+?
begin
(?:
(?> (?! begin | end ) .
| begin (?<counter>)
| end (?<-counter>)
)*
)
(?(counter)(?!))
end
"
, RegexOptions.IgnorePatternWhitespace
);
var regex2 = new Regex(@"(?:insert|update|delete).+");
var result = regex2.Matches(regex1.Replace(your_input, ""))
.Cast<Match>()
.Select(m => m.Value);
This code deletes all create/alter/drop statements and than looks for delete/alter/drop. I think it could be done using only one regex, but it is all I can suggest now, sorry:)