C# 正则表达式匹配键=";“价值”;图案

C# 正则表达式匹配键=";“价值”;图案,c#,regex,string,C#,Regex,String,我想匹配以下模式: key="value" key="value" key="value" key="value" ... 如果键和值为[a-z0-9]+,则两者都应分组(2组,可以匹配或跳过“-字符) 不应匹配的输入: key=“value”key=“value”(对之间没有空格) 现在我得到了这个(不是.NET语法): 问题在于,它与输入中的key4=“value4”匹配: key3="value3"key4="value4" 规格不是很清楚,但您可以尝试: (?<!\S)([a

我想匹配以下模式:

key="value" key="value" key="value" key="value" ...
如果键和值为[a-z0-9]+,则两者都应分组(2组,可以匹配或跳过“-字符)

不应匹配的输入:
key=“value”key=“value”(对之间没有空格)

现在我得到了这个(不是.NET语法):

问题在于,它与输入中的key4=“value4”匹配:

 key3="value3"key4="value4"

规格不是很清楚,但您可以尝试:

(?<!\S)([a-z0-9]+)=("[a-z0-9]+")(?!\S)
以上打印内容():

工具书类

对模式的解释 验证整个输入的模式基本上是:

maybe leading
spaces       ___ end of string anchor
  |         /
^\s*(entry)+$
|          \
beginning   \__ one or more entry
of string
anchor
其中每个条目为:

key=value(\s+|$)

也就是说,后跟空格或字符串结尾的键/值对。

使用lookback,就像使用lookahead一样:

(?<=\s|^)([a-z0-9]+)=(\"[a-z0-9]+\")(?=\s|$) 
(?我是第二个(但我还是太渺小,无法评论别人的答案)


另外,我发现这个网站非常棒。在页面的中间有一个关于环顾的部分,还有一些关于的进一步说明。

我认为SilentGhost的建议是关于使用String.Split()

像这样:

String keyValues = "...";

foreach(String keyValuePair in keyValues.Split(' '))
    Console.WriteLine(keyValuePair);

这显然更快更简单。

为什么这里需要正则表达式?你可以在空间上拆分并获得你的pairs我同意。不要使用正则表达式,除非你需要它们用于非平凡的模式。这只是在空间上拆分。你能提供一个例子来说明你的意思吗?你想用正则表达式解析XML属性吗?当然可行,但是在这种情况下,在C#中使用集成的XML解析会更容易,例如,但不限于LINQ to XML.Residuum,它不是XML属性。它是另一种东西,私有语法。这很好,一个小问题:如果输入中存在不匹配,是否可以使用regex not match任何东西?或者我必须在regex完成后验证它?
k1="v1" k2="v2" k3="v3" k4="v4": MATCH!
0[k1]=>[v1]
1[k2]=>[v2]
2[k3]=>[v3]
3[k4]=>[v4]
k1="v1" k2="v2"k3="v3" k4="v4": NO MATCH!
    k1="v1"      k2="v2"     k3="v3"     k4="v4"     : MATCH!
0[k1]=>[v1]
1[k2]=>[v2]
2[k3]=>[v3]
3[k4]=>[v4]
     : NO MATCH!
 what is this? : NO MATCH!
maybe leading
spaces       ___ end of string anchor
  |         /
^\s*(entry)+$
|          \
beginning   \__ one or more entry
of string
anchor
key=value(\s+|$)
(?<=\s|^)([a-z0-9]+)=(\"[a-z0-9]+\")(?=\s|$) 
String keyValues = "...";

foreach(String keyValuePair in keyValues.Split(' '))
    Console.WriteLine(keyValuePair);