Использование каретки и доллара указывает на то, что вы хотите сопоставить внедренные новые строки в строке темы, а не начало и конец всей строки. Если это так, то вам обязательно следует установить параметр RegexOptions.Multiline для вашего Regex. Если вы не установите эту опцию, ваша карета и доллар не будут иметь никаких особых последствий.
private static readonly Regex SIMPLE_IDENTIFIER_NAME_PATTERN = new Regex("^[a-zA-Z_][a-zA-Z0-9_]*$", RegexOptions.Compiled | RegexOptions.Multiline);
Возможно, стоит оценить необходимость компиляции этого регулярного выражения. Нужно ли его использовать повторно (например, в цикле)? Если нет, то ваш Regex фактически будет иметь более низкую производительность.
Помимо этого пункта, ваша конверсия представляется действительной. Как и предполагали некоторые другие, единственный способ быть уверенным в этом - это провести его модульное тестирование.