Store and use a pre-built Regex (where possible)

Calling Regex.Match has to internally parse and build a new regex tree each time. This only has to build each regex once, then can just reuse it.