C# 正则表达式匹配的值不正确

C# 正则表达式匹配的值不正确,c#,regex,C#,Regex,我用的是C#。我需要正则表达式来检查这样的文本: abc {val2:123} lorem ipsum {val1:234} 我需要匹配所有的{x:y}。我尝试过regex{.*}但它匹配整个值-“{val2:123}lorem ipsum{val1:234}”。当然不好玩 如何适当地更改我的正则表达式 string input=“abc{val2:123}lorem ipsum{val1:234}”; string input = "abc {val2:123} lorem ipsum {v

我用的是C#。我需要正则表达式来检查这样的文本:

abc {val2:123} lorem ipsum {val1:234}
我需要匹配所有的{x:y}。我尝试过regex{.*}但它匹配整个值-“{val2:123}lorem ipsum{val1:234}”。当然不好玩

如何适当地更改我的正则表达式

string input=“abc{val2:123}lorem ipsum{val1:234}”;
string input = "abc {val2:123} lorem ipsum {val1:234}";
var dict = Regex.Matches(input, @"\{(.+?):(.+?)\}").Cast<Match>()
            .ToDictionary(m => m.Groups[1].Value, m => m.Groups[2].Value);
var dict=Regex.Matches(输入,@“\{(.+?):(.+?)\}”).Cast() .ToDictionary(m=>m.Groups[1]。值,m=>m.Groups[2]。值);
string input=“abc{val2:123}lorem ipsum{val1:234}”;
var dict=Regex.Matches(输入,@“\{(.+?):(.+?)\}”).Cast()
.ToDictionary(m=>m.Groups[1]。值,m=>m.Groups[2]。值);
它匹配一个
{
,后跟零个或多个非
}
字符,然后匹配一个文本
}
,将匹配的任何字符放入组1

然后,您可以在冒号符号上拆分捕获的组
,以获得密钥和值对

它匹配一个
{
,后跟零个或多个非
}
字符,然后匹配一个文本
}
,将匹配的任何字符放入组1

然后,您可以在冒号符号上拆分捕获的组
,以获得密钥和值对

{(?\w+):(?\w+)}
以上应该是有效的。。。我已经包含了命名组,以便更容易地选择值。

{(?\w+):(?\w+)}

以上应该是有效的。。。我已经加入了命名组,以便更容易地选择值。

这是因为c sharp正则表达式在默认情况下是贪婪的。只需使用{.*?}

下面的代码将完全满足您的要求。这就是使正则表达式不灵活的问号

string s = "abc {val2:123} lorem ipsum {val1:234};";
MatchCollection nonGreedyMatches = Regex.Matches(s, @"{.*?}");

这是因为c sharp正则表达式在默认情况下是贪婪的。只需使用{.*?}

下面的代码将完全满足您的要求。这就是使正则表达式不灵活的问号

string s = "abc {val2:123} lorem ipsum {val1:234};";
MatchCollection nonGreedyMatches = Regex.Matches(s, @"{.*?}");

+1为正确答案。尽管如此,解释什么是懒惰/非贪婪匹配还是有用的。正确答案为+1。不过,解释什么是懒惰/非贪婪匹配会很有用。@AndreiMikhalevich不客气,谢谢你喜欢这个变体:)@AndreiMikhalevich不客气,谢谢你喜欢这个变体:)
string s = "abc {val2:123} lorem ipsum {val1:234};";
MatchCollection nonGreedyMatches = Regex.Matches(s, @"{.*?}");