MatchCollection result = Regex.Matches("key=\"name\" key2=name2 key3= key4=\"\"", @"(\S+)=""?([\w-.]+)""?"); for (var i = 0; i < result.Count; ++i) { Match item = result[i]; Debug.Log($"===== match: v:{item.Value}, index:{item.Index}, len:{item.Length}"); if (3 == item.Groups.Count) { var key = item.Groups[1].Value; var value = item.Groups[2].Value; //Debug.Log($"info: key:'{key}', value:'{value}'"); switch (key) { case "test": break; } } else { Debug.Log($"groups: {item.Groups.Count}"); for (var j = 0; j < item.Groups.Count; ++j) { Group g = item.Groups[j]; Debug.Log($"{j}: v:{g.Value}, index:{g.Index}, len:{g.Length}, succ:{g.Success}"); } } }