Вы явно соответствуете "
, затем любое число ^"
, затем "
, поэтому, конечно, оно заканчивается после второго "
.Если бы вы обернули это в [^\s"']*
(сопоставляя что-либо, кроме пробелов и "
) в группе, я думаю, что это может дать вам то, что вы ищете.Дайте мне знать, если этот результат удовлетворительный.
re := regexp.MustCompile(`[^\s"']+|([^\s"']*"([^"]*)"[^\s"']*)+|'([^']*)`)
Пример игровой площадки: https://play.golang.org/p/fWWsx7dIIRd
Я не очень хорошо разбираюсь в эффективности регулярных выражений, поэтому извините, если это добавляет слишком многосложность выражения.
РЕДАКТИРОВАТЬ: Одно предостережение для этого конкретного выражения заключается в том, что один "
будет разбить что-то на два результата, например, hi"there
будет разделен на hi
и there
.