using System.Collections.Generic;
using System.Text.RegularExpressions;
public static void Main()
test("\"c:\\program files\\svchost.exe\" -k -s svcName -t \"some text\" -p c:\\temp\\text.txt");
test("\"c:\\program files\\svchost.exe\" -k -s svcName -t \"some text\"");
test("c:\\progdir\\svchost.exe -k -s svcName -t \"some text\"");
private static void test(String cmdLine) {
Console.Write("\nTest: {0} \n\n", cmdLine);
List<String> args = parseCommandLineRegEx(cmdLine);
for (int i=0; i < args.Count(); i++) {
Console.WriteLine("\t[{0}] {1}", i, args[i]);
private static List<string> parseCommandLineRegEx(String CmdLine)
var re = @"\G(""((""""|[^""])+)""|(\S+)) *";
var ms = Regex.Matches(CmdLine, re);
List<String> list = ms.Cast<Match>()
.Select(m => Regex.Replace(
: m.Groups[4].Value, @"""""", @"""")).ToList();