You can break it down into the following pattern:
\s*,\s*(?=((\\["\\]|[^"\\])*"(\\["\\]|[^"\\])*")*(\\["\\]|[^"\\])*$)
which might look (a little) friendlier with the flag (?x) :
(?x)
But even in this commented version, it's still a monster. In plain English, this regular expression can be explained as follows:
Match a comma that is optionally surrounded by space characters only if you look ahead of that comma (all the way to the end of the line!), There are zero or even number of quotes, ignoring escaped quotes or escaped backslashes.
So, after seeing this, you can agree with ColinD (I do!) That using some kind of CSV analyzer is the way to go in this case.
Note that the above expression will leave qoutes around the tokens, i.e. the string a,b,"c,d\"",e (as a literal: "a,b,\"c,d\\\"\",e" ) will be broken as follows:
a b "c,d\"" e
source share