using System; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; public class Test { public static void Main() { IEnumerable titles = new string[] { "abc [FEAT one two] 123", "def(FEAT. three'four) 456", "ghi Featuring five", "jkl" }; var keys = new List { "FEAT", "FEAT.", "Featuring" }; keys = keys.OrderByDescending(x => x.Length).ToList(); var pattern = $@"(?:{string.Join("|", keys.Select(z => Regex.Escape(z)))})\s*([^])]*)"; Console.WriteLine(pattern); var result = new List(); foreach(string title in titles) { var _ = Regex.Match(title, pattern); if (_.Success) result.Add(_.Groups[1].Value); } Console.WriteLine( result.Count()); // Assert.AreEqual(3, result.Count()); Console.WriteLine( result.Contains("one two") ); //Assert.IsTrue(result.Contains("one two")); Console.WriteLine( result.Contains("three'four") ); //Assert.IsTrue(result.Contains("three'four")); Console.WriteLine( result.Contains("five") ); // Assert.IsTrue(result.Contains("five")); } }