Вы можете сопоставить любые подстроки между двойными кавычками, которые не заключены в пробелы, и захватить то, что внутри них, в именованную группу, или сопоставить любые 1+ непробельные символы и захватить в группу с одинаковыми именами и использовать
var results = Regex.Matches(str, @"(?<!\S)""(?<o>.*?)""(?!\S)|(?<o>\S+)")
.Cast<Match>()
.Select(m => m.Groups["o"].Value)
.ToList();
См. Демонстрационный пример regex .
Детали шаблона
(?<!\S)
- пробел или начало строкитребуется непосредственно слева от текущего местоположения "
- двойная кавычка (?<o>.*?)
- Группа «o»: любые 0+ символов, кроме новой строки, как можно меньше "
- двойная кавычка (?!\S)
- пробел или конец строки требуются непосредственно справа от текущего местоположения |
-или (?<o>\S+)
- Группа «o»: любые 1+ непробельных символов.
.NET позволяет использовать группы с одинаковыми именами в одном шаблоне регулярных выражений, накапливая значенияобнаружил в соответствующем буфере памяти, что вы можетеllect "via .Select(m => m.Groups["o"].Value)
.