Ruby で作った

# 冒頭に改行が、2回以上連続しているもの。先頭は、^ ではなく、\A
re_1 = /\A\n{2,}/
src = "\n\n1\n2\n\n3\n\n\n4\n\n\n\n5"

p dest = src.sub( re_1, "\n" )
#=> "\n1\n2\n\n3\n\n\n4\n\n\n\n5"
# \n\n1 の部分が、\n1 になっただけ。他は変化なし

re_2 = /\n{3,}/ # 改行が、3回以上連続しているもの
p dest_2 = dest.gsub( re_2, "\n\n" )
#=> "\n1\n2\n\n3\n\n4\n\n5"

print dest_2

メソッドチェーンで、下のようにも書ける。
print src.sub( re_1, "\n" ).gsub( re_2, "\n\n" )