正则表达式多个匹配

时间:2016-01-29 02:48:21

标签: c# regex

我有这个文字,我希望得到它的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模式的东西,所以有人可以帮我弄清楚吗?

我将感激你的每一个帮助。提前谢谢!

2 个答案:

答案 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]);
  }