Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Regex.Matches不是';我无法捕获我需要的所有组_C#_.net_Regex - Fatal编程技术网

C# Regex.Matches不是';我无法捕获我需要的所有组

C# Regex.Matches不是';我无法捕获我需要的所有组,c#,.net,regex,C#,.net,Regex,我有一大堆命令行参数 (-[a-zA-Z]+=?)+(([^\s]+)|(\s+((["'])(?:(?=(\\?))\2.)*?\6))) 我对正则表达式不是特别在行,我用它来验证我的结果。与此站点中的表达式匹配的正则表达式通常可以复制和粘贴,没有问题。这次不是 使用该命令行字符串的结果如下: -arg1 -arg2 -arg3=500 -arg4=-250,200,50.0 -arg5 "Hello World" -arg6 "[I don't know whats going on /h

我有一大堆命令行参数

(-[a-zA-Z]+=?)+(([^\s]+)|(\s+((["'])(?:(?=(\\?))\2.)*?\6)))
我对正则表达式不是特别在行,我用它来验证我的结果。与此站点中的表达式匹配的正则表达式通常可以复制和粘贴,没有问题。这次不是

使用该命令行字符串的结果如下:

-arg1 -arg2 -arg3=500 -arg4=-250,200,50.0 -arg5 "Hello World" -arg6 "[I don't know whats going on /here/]"
这是通过Regex.Matches循环的,每个

我不明白为什么这些引语不会成为比赛的一部分。这可能是
|(\s+([“')]
部分的空白问题吗?

更新:

我将可选空格(
\s*
)拉入一个带有空格或等号的非捕获组。您还会看到我在替换中首先移动了引号捕获,因为
\s+
将开始匹配
“foo
,我们不希望这样

Count = 6
[0]: "-arg1"
[1]: "-arg2"
[2]: "-arg3=500"
[3]: "-arg4=-250,200,50.0"
[4]: "-arg5"
[5]: "-arg6"

我大体上清理了一下,如果您编写的原始表达式中缺少任何功能,请告诉我:

(-\w+)(?:=|\s)?("[^"]*"|\S+)?


有两件事打破了你原来的表达方式,包括:

  • 非常难阅读,这会导致在使用
    \2
    \6
    引用时出现混乱
  • 没有参数键的捕获(
    -[a-zA-Z]+=?
  • 通过复杂的逻辑捕获引用值

您忘了添加匹配/捕获所需的内容,输出应该是什么?请注意正则表达式非常笨拙,需要进行很好的清理。我还没有在C#中完成控制台应用程序,但大多数其他语言都有一个库。当然,C#中有一个库不需要正则表达式。请查看此线程:。我对使用正则表达式不感兴趣外部libs!:P但感谢所有对此更感兴趣的人。也请看哦,哇,该死,这太好了!非常感谢。我一直在关注另一篇so文章中引用的值,这肯定更简单。我认为原因是内部引用,我甚至没有预料到。这样做是否会使-arg7这样的操作变得更复杂=“这也有效”?在我的原始表达式中,我无法创建另一个条件,因为我正在命中\10引用,无法使用它获得任何东西,所以我最初打算离开它。
(-\w+)\s*((?:=\S+)|"[^"]*")?