Я думаю, что вы имели в виду это регулярное выражение:
^(?:-?\d+|0x[\da-fA-F]+)$
с начальным и конечным якорями не часть альтернатив.
Вы можете захватить различные альтернативы:
^(?:(-?\d+)|(0x[\da-fA-F]+))$
Теперь вам просто нужно проверить, не является ли группа нулевой. Если это соответствует первому варианту, группа 1 будет ненулевой. Если это соответствует второму варианту, группа 2 будет не нулевой:
Match m = Regex.Match(...);
if (m.Groups[1] != null) {
// first alternative matched!
} else if (m.Groups[2] != null) {
// second alternative matched!
}
Вы также можете назвать свои группы, чтобы сделать ваш код более читабельным:
^(?:(?<decimal>-?\d+)|(?<hex>0x[\da-fA-F]+))$
Теперь вам нужно проверить m.Groups["decimal"]
и m.Groups["hex"]
.