Using .* to match a single field is bad; that will match one or more fields. Using [^,]*, will match exactly one field.
The replies so far will only find single quoted characters. (So they will find a seventh field “X” but not “XX” or “”.) To find multiple-character strings too, you have to be more careful. If you know that the fields are always double-quoted, you can use something like
“(|[^,]{2,}|[^MFU,])”
to match a quoted string with either zero or two characters between the quotes or with a single character which is not M, F, or U.
This won’t find fields like M or X, though. If you want to find unquoted and malformed fields like M and “M"M as well, add extra conditions to the whole thing:
“(|[^,]{2,}|[^MFU,])”|[^,”][^,]}|[^,][^,"]
(this checks for fields which either start or end with a nonquote). Now you must anchor the end to make sure you get the whole field; you end up with something like
/^([^,]*,){7}("(|[^,]{2,}|[^MFU,])"|[^,"][^,]*}|[^,]*[^,"])(,.*)?$/
(the desired field is now in $2).
Really, finding exceptional cases like this is probably better done with actual logic instead of coding some write-only regexp though. Use a regexp to check for proper quoting; then split the line into fields and check each one in code.