Nu har jag inte möjlighet att pröva detta eftersom jag inte har något program som klarar conditionals i regexpar, men det borde åtmindstone vara lätt att fixa eventuella missar.
(\+|-)?(")?(?(\2)[^"]+"|[^ ]+)
Först så tar den ett plus eller minus om det finns, sen ett " om det finns, och efter det så ska den se om den fångade någon ", och i så fall så tar den fram till nästa ", annars tar den fram till nästa mellanslag.
Du får slå in det i någon replace-funktion som tar hand om sqlsyntaxen.