in reply to Regex: how to consider an unknown number of tabs?

Change the definition of "$/" about what a new line is, in this case, the records are separated on each empty line and no chomping's done hence the records structure is preserved for each line, however, you might wanna chop if you wanted to get rid of the trailing new line characters for each independent record..
use strict; use warnings; local $/=''; #Empty lines are the record terminators while(<DATA>){ # print if !/^r145/; print unless /^r145/; } __DATA__ c114: 0245, 0456, 1545 2555, 2444, 0344 0444, 3434, 1434 r145: 0544, 0688, 2988 1332, 0221, 0867 0655, 4548, 7463 c12: 2322, 0556, 3998 3545, 2002, 4500 5650, 0830, 3324 3433, 7070, 3404
OUTPUTS:
c114: 0245, 0456, 1545 2555, 2444, 0344 0444, 3434, 1434 c12: 2322, 0556, 3998 3545, 2002, 4500 5650, 0830, 3324 3433, 7070, 3404


Excellence is an Endeavor of Persistence. Chance Favors a Prepared Mind.