Я считаю, что вы не должны использовать строки для этой цели. Вам нужен тип данных, который может представлять комбинацию горячих клавиш, которая состоит из «нормальной» клавиши и набора модификаторов (Alt, Control, Shift), каждый из которых может быть включен или выключен. Модификаторы включения / выключения могут быть представлены перечислением с флагами, а «нормальный» ключ может быть представлен отдельным перечислением. Оба перечисления могут содержаться в классе.
Перечисление System.Windows.Forms.Keys может использоваться как оба перечисления. Вы можете хранить два числовых значения (одно для модификаторов, одно для «обычного» ключа) - базовые значения перечисления - и они будут представлять комбинацию. Нет необходимости хранить строки.
Если вы используете строки для этой цели, вам нужно лучше определить свои ограничения. В ваших правилах не указано, как «Shift + Other» является недействительным, а «Shift + F». В любом случае, для этого можно отделить строку с помощью «+» (при условии, что это всегда разделитель), а затем сравнить каждую часть со списком допустимых значений, который, очевидно, содержит «Shift», «Alt», « Контроль »и все отдельные буквы.