Во-первых, для разбора аргументов командной строки не используйте регулярные выражения. Вот связанный вопрос, на который, я думаю, вам стоит взглянуть:
Но для вашей конкретной проблемы с регулярным выражением - параметры являются необязательными, и затем вы сравниваете с пробелом, за которым следует что-либо вообще, где все может включать, например, недопустимые домены и / или недопустимые параметры. До сих пор пример это действует в соответствии с вашим регулярным выражением:
program.exe -c -invalid
Один из способов улучшить это, если быть более точным в отношении разрешенных символов в домене, а не просто сопоставлять что-либо.
Другая проблема с вашими регулярными выражениями заключается в том, что вы не допускаете пробелов между переключателями. Чтобы справиться с этим, вы, вероятно, хотите что-то вроде этого:
(?:(?:-\?|-help|-c|-continuous|-l|-log|-ip) +)*
Я также хотел бы отметить, что вы должны использовать string.Join
вместо цикла, который вы используете в настоящее время.
string strArgs = string.Join(" ", args);