alexander.pronin,
И не надо хитрить:
'\n.*Begin\n(.*\n){3} — это что?

Под четыре строчки легче лёгкого. Вы сделайте как у меня, общий случай, когда неизвестно сколько строк в блоке.
Вариант от 0 до 7 строчек внутри блока.
#! /usr/bin/env python
# -*- coding: UTF-8 -*-
import re
l=open('./test', 'rb').read()
print 'old:'
print l
print 'new:'
print re.compile('\n.*Begin\n(.*\n){0,7}end2\n').sub('\n',l)
Здесь проблемы могут быть только в составлении правильного регулярного выражения.
А в принципе, проблем нет.
Вот здесь ниодного параметра отвечающего за количество строк, и количество здесь варьируется, а не подбирается как у тебя.
А откуда мне знать, что от 0 до 7 строк
