C # ToTitleCase и текстовые даты / время - PullRequest
10 голосов
/ 25 января 2012

У меня есть строка «ЧЕТВЕРГ 26 ЯНВАРЯ 2011».

Когда я форматирую это с помощью CultureInfo.ToTitleCase ():

var dateString = "THURSDAY 26th JANUARY 2011";
var titleString = myCultureInfoObject.TextInfo.ToTitleCase(dateString);

Отображается так: "Thursday 26Th January 2011".Это именно то, что мне нужно ... за исключением того, что T в 26Th было написано заглавными буквами.Есть ли способ предотвратить это, потому что это дата и выглядит неправильно?Т.е. только символы заглавных букв, которые не имеют номера непосредственно перед ними?

1 Ответ

8 голосов
/ 25 января 2012

Вы можете использовать регулярное выражение с MatchEvaluator, чтобы поместить только "настоящие" слова в регистр заголовков:

var dateString = "THURSDAY 26th JANUARY 2011";
MatchEvaluator ev = m => myCultureInfoObject.TextInfo.ToTitleCase(m.Value);
var titleString = Regex.Replace(dateString, @"\b[a-zA-Z]+\b", ev);

Это будет применять регистр заголовков только к "THURSDAY" и "JANUARY", но не«26-е», потому что оно не соответствует шаблону регулярных выражений.

...