You could use awk
:
gawk 'BEGIN{FPAT="([^;]+)|(\"[^\"]+\")"}{for(i=1;i<=NF;i++){printf ("%s\n",$i)}}' file.csv
For your input, it'd produce:
"Hi"
"i"
"got;a problem"
(I doubt if it's possible to achieve the desired result using bash
, i.e. by manipulating IFS
.)