using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;
public class Test
{
public static void Main()
{
var rx = @"(WordA\s)?(?:WordB\s)?WordC";
var strings = new List<String> {"WordC", "WordB WordC", "WordA WordC", "WordA WordB WordC"};
foreach (var s in strings)
{
var m = Regex.Match(s, rx);
Console.WriteLine("{0}: {1}", s, (m.Groups[1].Success ? "NO MATCH" : m.Value));
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLklPOwp1c2luZyBTeXN0ZW0uTGlucTsKdXNpbmcgU3lzdGVtLlRleHQuUmVndWxhckV4cHJlc3Npb25zOwoKcHVibGljIGNsYXNzIFRlc3QKewoJcHVibGljIHN0YXRpYyB2b2lkIE1haW4oKQoJewoJCXZhciByeCA9IEAiKFdvcmRBXHMpPyg/OldvcmRCXHMpP1dvcmRDIjsKCQl2YXIgc3RyaW5ncyA9IG5ldyBMaXN0PFN0cmluZz4geyJXb3JkQyIsICJXb3JkQiBXb3JkQyIsICJXb3JkQSBXb3JkQyIsICJXb3JkQSBXb3JkQiBXb3JkQyJ9OwoJCWZvcmVhY2ggKHZhciBzIGluIHN0cmluZ3MpCgkJewoJCQl2YXIgbSA9IFJlZ2V4Lk1hdGNoKHMsIHJ4KTsKCQkJQ29uc29sZS5Xcml0ZUxpbmUoInswfTogezF9IiwgcywgKG0uR3JvdXBzWzFdLlN1Y2Nlc3MgPyAiTk8gTUFUQ0giIDogbS5WYWx1ZSkpOwoJCX0KCX0KfQ==