Just another idea, which might or might not be applicable in your case.
I too once had the requirement to allow multiline entries (within one field).
The CSV tables were written by Excel, so it was possible to set things up
such that newlines within-field were \n Unix-style, while the
row records were being separated by \r\n Windows-style newlines.
That way, I could easily distinguish them, in order to read in one row
at a time from the CSV file.
Not sure if you have control over how the CSV files are being
generated, but if so, maybe you can arrange for something similar...
Also, personally, I'd use Text::CSV_XS (or some such) to
properly split up fields, and then do my manipulations on them...
OTOH, I don't want to spoil your fun finding a nice regex solution :)