Я знаю, теперь у меня две проблемы. Но мне весело!
Я начал с этого совета не пытаться разделить, а вместо этого найти подходящее поле и расширил его до этого выражения.
final Pattern pattern = Pattern.compile("\"([^\"]*)\"|(?<=,|^)([^,]*)(?=,|$)");
Выражение выглядит так без раздражающих кавычек:
"([^"]*)"|(?<=,|^)([^,]*)(?=,|$)
Это хорошо работает для меня - либо соответствует "двум кавычкам и тому, что между ними", либо "что-то между началом строки или запятой и концом строки или запятой". Перебор совпадений возвращает мне все поля, даже если они пусты. Например,
the quick, "brown, fox jumps", over, "the",,"lazy dog"
разбивается на
the quick
"brown, fox jumps"
over
"the"
"lazy dog"
Отлично! Теперь я хочу отбросить кавычки, поэтому я добавил заглядывающие и заглядывающие группы, которые не захватывали, как я делал для запятых.
final Pattern pattern = Pattern.compile("(?<=\")([^\"]*)(?=\")|(?<=,|^)([^,]*)(?=,|$)");
снова выражение:
(?<=")([^"]*)(?=")|(?<=,|^)([^,]*)(?=,|$)
Вместо желаемого результата
the quick
brown, fox jumps
over
the
lazy dog
теперь я получаю эту разбивку:
the quick
"brown
fox jumps"
,over,
"the"
,,
"lazy dog"
Чего мне не хватает?