Компьютерный термин для того, что вы делаете: лексический анализ ; прочитайте это для хорошего резюме этой общей задачи.
Исходя из вашего примера, я предполагаю, что вы хотите, чтобы пробел разделял ваши слова, но в кавычках следует рассматривать их как "слово" без кавычек.
Самый простой способ сделать это - определить слово как регулярное выражение:
([^"^\s]+)\s*|"([^"]+)"\s*
В этом выражении указывается, что «слово» представляет собой (1) текст без кавычек, текст без пробелов, окруженный пробелами, или (2) текст без кавычек, окруженный кавычками (за которым следует пробел). Обратите внимание на использование скобок для выделения нужного текста.
Вооружившись этим регулярным выражением, ваш алгоритм прост: ищите в своем тексте следующее «слово», как определено в скобках, и возвращайте его. Повторяйте это до тех пор, пока у вас не закончатся слова.
Вот самый простой фрагмент рабочего кода, который я мог придумать, в VB.NET. Обратите внимание, что мы должны проверить обе группы для данных, так как есть два набора захватывающих скобок.
Dim token As String
Dim r As Regex = New Regex("([^""^\s]+)\s*|""([^""]+)""\s*")
Dim m As Match = r.Match("this is a ""test string""")
While m.Success
token = m.Groups(1).ToString
If token.length = 0 And m.Groups.Count > 1 Then
token = m.Groups(2).ToString
End If
m = m.NextMatch
End While
Примечание 1: Ответ Уилла выше, та же идея, что и этот. Надеюсь, этот ответ немного лучше объясняет детали сцены:)