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

时间:2013-09-10 07:55:10

标签: c# regex

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

abc {val2:123} lorem ipsum {val1:234}

我需要匹配所有 {x:y} 。我已经尝试了正则表达式 {。*} ,但它匹配整个值 - “ {val2:123} lorem ipsum {val1:234} ”。当然这不好玩。

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

4 个答案:

答案 0 :(得分:4)

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);

答案 1 :(得分:2)

\{([^}]*)\}

这匹配{后跟零个或多个不是}的字符,然后匹配文字},它会将匹配的内容放入第1组。

然后,您可以在冒号符号:上拆分捕获的组以获取键和值对。

Regex101 Demo

答案 2 :(得分:2)

{(?<param>\w+):(?<value>\w+)}

以上内容应该有效...我已经包含了命名组,以便更轻松地选择值。

答案 3 :(得分:2)

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

即可

以下代码将完全符合您的要求。这就是那个使正则表达式无效的问号。

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