Мне кажется, я понял ваш запрос. Вы хотите проверить, какому "выражению" соответствует текущее сообщение, и в зависимости от него установить соответствующий флаг в значение true. Также найдите «поле», о котором идет речь.
Один из способов достижения этого:
Обновление
На основании ваших комментариев обновлен код для поддержки нескольких полей.
string input = "Age should be between 1 and 99.";
string required = "The {0} field is required.";
string date = "The {0} field is not a valid date.";
string range = "{0} should be between {1} and {2}.";
bool isRequired = false;
bool isDate = false;
bool isRange = false;
string extractedField;
var possibilities = new []
{
new KeyValuePair<string,Action>(ToRegex(required), ()=>((Action)(() => { isRequired = true;}))()),
new KeyValuePair<string,Action>(ToRegex(date), ()=>((Action)(() => { isDate = true;}))()),
new KeyValuePair<string,Action>(ToRegex(range), ()=>((Action)(() => { isRange = true;}))())
};
var result = possibilities
.Where(x=>Regex.Match(input,x.Key).Success)
.Select(x=> new KeyValuePair<IEnumerable<string>,Action>(
Regex.Match(input,x.Key).Groups.Cast<Group>().Where(c=>c.Name.StartsWith("Field")).Select(c=>c.Value),
x.Value)).First();
var fields = result.Key;
result.Value();
Console.WriteLine($"{nameof(extractedField)}={string.Join(",",fields)},{Environment.NewLine}{nameof(isRequired)}={isRequired},{Environment.NewLine}{nameof(isDate)}={isDate}");
Где ToRegex определяется как
public string ToRegex(string value)
{
var result = new List<string>();
foreach(var item in value.Split(' '))
{
if(Regex.Match(item,@"{(?<Value>\d*)}").Success)
{
var match = Regex.Match(item,@"{(?<Value>\d*)}");
result.Add(Regex.Replace(item,@"{(?<Value>\d*)}",$"(?<Field{match.Groups["Value"].Value}>\\S*)"));
continue;
}
result.Add(item);
};
return string.Join(" ",result);
}
Демонстрационный код
Приведенный выше код использует Regex для поиска соответствующее совпадение.
Пример вывода
extractedField=Age,1,99,
isRequired=False,
isDate=False
Обновление
На основе вашего комментария для поддержки нескольких слов вы можете использовать следующее.
public string ToRegex(string value)
{
var result = new List<string>();
foreach(var item in value.Split(' '))
{
if(Regex.Match(item,@"{(?<Value>\d*)}").Success)
{
var match = Regex.Match(item,@"{(?<Value>\d*)}");
result.Add(Regex.Replace(item,@"{(?<Value>\d*)}",$"(?<Field{match.Groups["Value"].Value}>[\\S ]*)"));
continue;
}
result.Add(item);
};
return string.Join(" ",result);
}