Here's a simple way to extract a list of switch/flags and their parameters from a command line argument in C#.
1 2 3 4 5 6 7 8 9 10 11 12 13 | Regex regex = new Regex( @"(?< switch> -{1,2}\S*)(?:[=:]?|\s+)(?< value> [^-\s].*?)?(?=\s+[-\/]|$)" ); string commands = "--switch value1 --switch2 \"c:\\folder 1\\file1.txt\" -switch-3 value-3 --switch4 -switch5" ; List< KeyValuePair< string , string > > matches = (from match in regex.Matches(commands).Cast< match> () select new KeyValuePair< string , string > (match.Groups[ "switch" ].Value, match.Groups[ "value" ].Value)).ToList(); foreach (KeyValuePair< string , string > _match in matches) { Response.Write(" switch : " + _match.Key + " value:" + _match.Value); } |
You can pass in a command with multiple switches such as "-switch" or "--switch":
--switch1 value1 --switch2 "c:\folder 2\file2.txt" -switch-3 value-3 --switch4 -switch5
the regex will extract the flags along with any optional values and return a list of key-value pairs.
I had looked at a couple of solutions such as http://www.codeproject.com/Articles/3111/C-NET-Command-Line-Arguments-Parser and http://lukasz-lademann.blogspot.co.uk/2013/01/c-command-line-arguments-parser.html but I think this way is a bit simpler and returns better results.
Also, this way allows optional parameters which can contain file paths, you can test here http://regexhero.net/tester/?id=2f4e252d-c89e-4134-8c7c-65c5186b3338
No comments:
Post a Comment