Ну, вы могли бы использовать регулярные выражения и матч оценщик обратного вызова, как это:
regex = new Regex(@"\{(?<value>.*?)\}",
RegexOptions.CultureInvariant | RegexOptions.ExplicitCapture);
string replacedText = regex.Replace(<text>,
new MatchEvaluator(this.EvaluateMatchCallback));
и ваш оценщик обратный вызов будет делать что-то вроде этого:
private string EvaluateMatchCallback(Match match) {
string templateInsert = match.Groups["value"].Value;
// or whatever
string replacedText = GetReplacementTextBasedOnTemplateValue(templateInsert);
return replacedText;
}
После того, как вы получите regex match, вы можете просто провести сравнение с регистром и вернуть правильное значение замены.
EDIT я вроде предположил, что вы пытались найти заполнители в блоке текста, а не беспокоиться о корпусе сами по себе, если ваш шаблон действует все время, то вы можете просто проверить первые два символа
string foo = "teMPLATE";
if (char.IsLower(foo[0])) {
if (char.IsLower(foo[1])) {
// first lower and second lower
}
else {
// first lower and second upper
}
}
else {
if (char.IsLower(foo[1])) {
// first upper and second lower
}
else {
// first upper and second upper
}
}
Я бы еще использовать регулярное выражение для соответствия замены заполнителя, но это только мне: сам и расскажет вам корпус вам нужно использовать в выражении замены заполнитель.
Если не все символы в нижних/верхних - просто пропустить подстроку вхождения? – sll
если шаблон установлен в моде «Camel case», просто определите остальных, изучив первые две буквы ... о, geee ... Я просто понял - в любое время это зависит только от пары ведущих букв – Agzam
Это только 4 случая? Или у вас больше, например, '{tEmPlAte}' и т. Д.? – code4life