using System; using System.Text.RegularExpressions; public class Test { public static void Main() { string msg= "(((a) or (b) or (c)) and ((d) or (e)) and ((!f) or (!g)))"; var charSetOccurences = new Regex(@"\(((?:[^()]|(?\()|(?<-o>\)))+(?(o)(?!)))\)"); var charSetMatches = charSetOccurences.Matches(msg); foreach (Match mainMatch in charSetMatches) { var sets = charSetOccurences.Matches(mainMatch.Groups[1].Value); foreach (Match match in sets) { Console.WriteLine(match.Groups[0].Value); } } } }