Regex, match the most informative pattern
I cannot say much about the limits of the pattern, the only one that I encountered so far was the length of the group name.




IEnumerable&lt;Affirmation&gt; affirmations = matches.Cast&lt;Match&gt;().Select(m =&gt; {
    if (yesses.Contains(m.Value.ToLower())) { return Affirmation.Yes; }
    else if (nos.Contains(m.Value.ToLower())) { return Affirmation.No; }
    else { return Affirmation.Unsure; }
});



You can however make the lookup faster by using a HashSet&lt;T&gt;. Its Contains method is an O(1) operation unlike the array's O(n). 

Additionaly you should instantiate it with StringComparer.OrdinalIgnoreCase so that you don't have to use ToLower/ToUpper.



Another possibility would be to use named groups and catch the expressions there so that you can just use them without looking them up in the collections.