Please see my comment to the question. I found a bug: you forgot to escape ':'. Make it '\:', escaped.
Besides, I would greatly simplified it, employing additional validation via C# after Regex validation. Do this:
Use the pattern
^([0-9][0-9])\:([0-9][0-9]) (AM|PM)$
, and make the case-insensitive match.
It will give you three string string groups, inside round brackets. Extract two groups with digits and test each for comparison with numbers:
string digitGroupText =
byte number = byte.Parse(digitGroupText);
if (number > 59)
Got the idea? Regex along is not suitable for each and every validation.
Good luck,
—SA