Звучит так, будто вам просто нужно сопоставить все, что не является заглавной буквой. Например:
input = Regex.Replace(input, @"[^A-Z]+", ToSmallCaps);
... где ToSmallCaps
- это делегат MatchEvaluator , который преобразует сопоставленный текст в маленькие заглавные буквы, однако это именно то, что вы делаете. Например:
static string ToSmallCaps(Match m)
{
return String.Format(@"<span style=""whatever"">{0}</span>", m.Value);
}
РЕДАКТИРОВАТЬ: более регулярное выражение для более удобной для Unicode версии будет @"[^\p{Lu}\p{Lt}]+"
, что соответствует одному или нескольким значениям, отличным от заглавной или заглавной буквы, на любом языке.