C# 将正则表达式匹配包含到分隔字符串中

C# 将正则表达式匹配包含到分隔字符串中,c#,regex,C#,Regex,我正试图解析从已经启动的进程中读取的命令行选项。原始字符串看起来是这样的 -skipIntro-noSplash-cpuCount=7-exThreads=7-enableHT-malloc=tbb4malloc_bi_x64-hugePages-maxmem=4096-maxvram=2048-world=empty-showScriptErrors-mod= 单个参数可以有四种不同的格式 无值参数:-skipIntro 无值转义参数:-skipIntro 值为:-mod=foo的参数 值为:

我正试图解析从已经启动的进程中读取的命令行选项。原始字符串看起来是这样的 -skipIntro-noSplash-cpuCount=7-exThreads=7-enableHT-malloc=tbb4malloc_bi_x64-hugePages-maxmem=4096-maxvram=2048-world=empty-showScriptErrors-mod=

单个参数可以有四种不同的格式

无值参数:-skipIntro 无值转义参数:-skipIntro 值为:-mod=foo的参数 值为:-mod=foo或-mod=b ar的转义参数 转义参数可以包括空格。 我想将所有参数拆分为一个字符串数组。拆分的参数应包括前缀-分别-

我的正则表达式如下所示: \s*[\]*?-工作正常。但是,这也会删除上面提到的前缀。如何将前缀包含到分离的参数数组中


我有一个不拆分字符串的解决方案。相反,它返回匹配项

(?<=^|\s)"-.*?"|-[^\s]*?(?=$|\s)

请注意,在逐字字符串@…中,双引号是通过将它们加倍来显示的。

该正则表达式是否适用于您试图实现的目标

((\")?-.*?(?(2)\"|(\s|$)))

请注意,第一组捕获每个选项,但您必须对其进行修剪,因为它保留了下面一个分隔选项的空白。这是我能做的最好的保留周围的引号。

方法是在模式中描述参数并找到它们。不要尝试拆分。@casimirithippolyte我应该如何更改正则表达式来匹配它?类似于这样:使用正则表达式不是解析参数的最佳解决方案:@Indent这个问题不是关于解析程序本身的命令行选项,而是关于解析其他进程启动时使用的命令行选项
((\")?-.*?(?(2)\"|(\s|$)))