Вы обязательно должны сделать это в одном регулярном выражении? Я бы использовал одно регулярное выражение для разбиения строки на составные части, а затем просто перебрал бы те, чтобы найти первое с запятой.
У меня еще нет Java на этом ноутбуке, поэтому я не могу проверить код для выполнения разбиения, но я ожидаю, что регулярное выражение будет примерно таким:
("[^"]*")(?:, ("[^"]*"))*
Вполне возможно, что движок Java regex не позволит вам получить несколько совпадений для одной и той же группы захвата, однако ... Я почти уверен, что вы можете использовать это в .NET достаточно легко, но это может быть немного сложнее на Яве. Вам может нужно что-то вроде:
(?:^|, )("[^"]*")
потреблять «либо начало строки, либо запятую, за которой следует пробел» до начала фактической строки.
Все это все еще просто пытается разделить текст на части - хотя он не пытается найти первую строку, содержащую запятую ... но это может быть отправной точкой для этого. К сожалению, в этот момент мое regex-fu заканчивается - я все равно буду делать это «разделить, а затем повторить»:)