Используйте регулярное выражение:
string input = "this is \"a string\" separated by spaces \"with quotes\" also";
Regex r = new Regex("[^\\s\"']+|\"([^\"]*)\"|'([^']*)'");
var matches = r.Matches(input);
Приведите правильное объяснение:
[^\\s\"']+
соответствует 1+ символам с пробелом или двойной кавычкой
|
ИЛИ
\"([^\"]*)\"
соответствует 0+ символам внутри двойных кавычек, которые не являются самой двойной кавычкой
|
ИЛИ
'([^']*)'
соответствует 0+ символы внутри одной кавычки, которая сама по себе не является отдельной кавычкой
Кроме того, я не очень хорош в .net Regex, но, насколько я могу судить, они странные, когда дело доходит до соответствующих групп.Чтобы получить строку без кавычек, я должен был сделать странный цикл:
var matches = r.Matches(input);
foreach (Match match in matches)
{
Console.WriteLine(match.Groups[1].Value);
}
Был вызов API, который вы могли бы сделать, если работаете в Windows (это * 1025)* поддерживается прошлая перспектива, независимо от того, что говорит pinvoke.net).Очевидно, это не кроссплатформенность.
[DllImport("shell32.dll", SetLastError = true)]
static extern IntPtr CommandLineToArgvW(
[MarshalAs(UnmanagedType.LPWStr)] string lpCmdLine,
out int pNumArgs);
Пример кода здесь