Hope there is one solution O.K. for you. >>>>> Code >>>>> mylines = <<EOT A......1 M..... d.... A....1 r.... f.... A.....1 c.... t.... Z..... EOT puts '########## Without last Z-Record ##########' mylines.scan(/^A.*?(?=^(?:A|Z))/m){|a|puts "#{a}\n----------"} puts '########## Last Record up to EOF ##########' mylines.scan(/^A.*?(?=^A|\Z)/m){|a|puts "#{a}\n----------"} puts '########## Includings last Z-Record ##########' mylines.scan(/^A.*?(?:(?=^A)|^Z.*$)/m){|a|puts "#{a}\n----------"} >>>>> Results >>>>> ########## Without last Z-Record ########## A......1 M..... d.... ---------- A....1 r.... f.... ---------- A.....1 c.... t.... ---------- ########## Last Record up to EOF ########## A......1 M..... d.... ---------- A....1 r.... f.... ---------- A.....1 c.... t.... Z..... ---------- ########## Includings last Z-Record ########## A......1 M..... d.... ---------- A....1 r.... f.... ---------- A.....1 c.... t.... Z..... ---------- >>>>> End >>>>> Wolfgang NĂ¡dasi-Donner