using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
public class Test
{
public static void Main()
{
IEnumerable<string> titles = new string[]
{
"abc [FEAT one two] 123",
"def(FEAT. three'four) 456",
"ghi Featuring five",
"jkl"
};
var keys = new List<string> { "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<string>();
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"));
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CnVzaW5nIFN5c3RlbS5UZXh0LlJlZ3VsYXJFeHByZXNzaW9uczsKCnB1YmxpYyBjbGFzcyBUZXN0CnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkKCXsKCQlJRW51bWVyYWJsZTxzdHJpbmc+IHRpdGxlcyA9IG5ldyBzdHJpbmdbXQoJICAgIHsKCSAgICAgICAgImFiYyBbRkVBVCBvbmUgdHdvXSAxMjMiLAoJICAgICAgICAiZGVmKEZFQVQuIHRocmVlJ2ZvdXIpIDQ1NiIsCgkgICAgICAgICJnaGkgRmVhdHVyaW5nIGZpdmUiLAoJICAgICAgICAiamtsIgoJICAgIH07CgoJCXZhciBrZXlzID0gbmV3IExpc3Q8c3RyaW5nPiB7ICJGRUFUIiwgIkZFQVQuIiwgIkZlYXR1cmluZyIgfTsKCQlrZXlzID0ga2V5cy5PcmRlckJ5RGVzY2VuZGluZyh4ID0+IHguTGVuZ3RoKS5Ub0xpc3QoKTsKCQl2YXIgcGF0dGVybiA9ICRAIig/OntzdHJpbmcuSm9pbigifCIsIGtleXMuU2VsZWN0KHogPT4gUmVnZXguRXNjYXBlKHopKSl9KVxzKihbXl0pXSopIjsKCQlDb25zb2xlLldyaXRlTGluZShwYXR0ZXJuKTsKCQkKCQl2YXIgcmVzdWx0ID0gbmV3IExpc3Q8c3RyaW5nPigpOwoJCWZvcmVhY2goc3RyaW5nIHRpdGxlIGluIHRpdGxlcykKCSAgICB7CgkgICAgICAgIHZhciBfID0gUmVnZXguTWF0Y2godGl0bGUsIHBhdHRlcm4pOwogICAgCQlpZiAoXy5TdWNjZXNzKQogICAgICAgIAkJcmVzdWx0LkFkZChfLkdyb3Vwc1sxXS5WYWx1ZSk7CgkgICAgfQoJCgkgICAgQ29uc29sZS5Xcml0ZUxpbmUoIHJlc3VsdC5Db3VudCgpKTsgLy8gQXNzZXJ0LkFyZUVxdWFsKDMsIHJlc3VsdC5Db3VudCgpKTsKCSAgICBDb25zb2xlLldyaXRlTGluZSggcmVzdWx0LkNvbnRhaW5zKCJvbmUgdHdvIikgKTsgLy9Bc3NlcnQuSXNUcnVlKHJlc3VsdC5Db250YWlucygib25lIHR3byIpKTsKCSAgICBDb25zb2xlLldyaXRlTGluZSggcmVzdWx0LkNvbnRhaW5zKCJ0aHJlZSdmb3VyIikgKTsgLy9Bc3NlcnQuSXNUcnVlKHJlc3VsdC5Db250YWlucygidGhyZWUnZm91ciIpKTsKICAgIAlDb25zb2xlLldyaXRlTGluZSggcmVzdWx0LkNvbnRhaW5zKCJmaXZlIikgKTsgLy8gQXNzZXJ0LklzVHJ1ZShyZXN1bHQuQ29udGFpbnMoImZpdmUiKSk7Cgl9Cn0=