我有这个文字,我希望得到它的2个匹配但问题是我总是只得到1个匹配。这是c#
中的示例代码string formattedTag = "{Tag 1}::[FORMAT] asdfa {Tag 2}::[FORMAT]";
var tagMatches = Regex.Matches(formattedTag, @"(\{.+\}\:\:\[.+\])");
我希望在这里获得两场比赛“{Tag 1} :: [FORMAT]”和“{Tag 2} :: [FORMAT]” 但是这段代码的结果是变量formattedTag的实际值。 它必须是来自regexp模式的东西,所以有人可以帮我弄清楚吗?
我将感激你的每一个帮助。提前谢谢!
答案 0 :(得分:1)
您需要使用以下正则表达式:
(\{[^}]+\}\:\:\[[^]]+\])
您希望匹配字符串括号内部分中除结束括号之外的任何字符,否则整个字符串将匹配,因为正则表达式是贪婪的,并尝试检索最长匹配。
答案 1 :(得分:0)
string formattedTag = "{tag 1}::[admin] adfaf{tag 2}::[test.user]";
var tagMatches = Regex.Matches(formattedTag, @"\{(\w+\s*\d{1,2})\}::\[(.*?)\]");
foreach(Match item in tagMatches)[enter image description here][1]{
Console.WriteLine(item.Groups[0]);
Console.WriteLine(item.Groups[1] + "=" + item.Groups[2]);
}