我正在使用 C#。我需要正则表达式来检查这样的文本:
abc {val2:123} lorem ipsum {val1:234}
我需要匹配所有的{x:y}。我试过正则表达式{.*}但它匹配整个值 - “ {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);
{(?<param>\w+):(?<value>\w+)}
以上应该可以工作......我已经包含了命名组以使选择值更容易。
发生这种情况是因为 c sharp regex 默认情况下是贪婪的。只需使用{.*?}
以下代码将完全符合您的要求。这就是使正则表达式变得不受欢迎的那个问号的全部内容。
string s = "abc {val2:123} lorem ipsum {val1:234};";
MatchCollection nonGreedyMatches = Regex.Matches(s, @"{.*?}");