我正在使用C#。我需要正则表达式来检查这样的文本:
abc {val2:123} lorem ipsum {val1:234}
我需要匹配所有 {x:y} 。我已经尝试了正则表达式 {。*} ,但它匹配整个值 - “ {val2:123} lorem ipsum {val1:234} ”。当然这不好玩。
如何适当地改变我的正则表达式?
答案 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)
答案 2 :(得分:2)
{(?<param>\w+):(?<value>\w+)}
以上内容应该有效...我已经包含了命名组,以便更轻松地选择值。
答案 3 :(得分:2)
这是因为c sharp正则表达式默认是贪婪的。只需使用 {。*?}
即可以下代码将完全符合您的要求。这就是那个使正则表达式无效的问号。
string s = "abc {val2:123} lorem ipsum {val1:234};";
MatchCollection nonGreedyMatches = Regex.Matches(s, @"{.*?}");