Мне нужно разобрать string
, который выглядит как «Abc[123]». Требуется числовое значение в скобках, а также значение string
перед скобками.
Большинство примеров, которые я тестировал, работают нормально, но есть проблемы с анализом некоторых особых случаев.
Этот код, кажется, отлично работает для «обычных» случаев, но имеет некоторые проблемы с обработкой «особых» случаев:
var pattern = @"\[(.*[0-9])\]";
var query = "Abc[123]";
var numVal = Regex.Matches(query, pattern).Cast<Match>().Select(m => m.Groups[1].Value).FirstOrDefault();
var stringVal = Regex.Split(query, pattern)
.Select(x => x.Trim())
.FirstOrDefault();
Как следует настроить код для обработки некоторых особых случаев? Например, для строки «Abc[]» синтаксический анализатор должен правильно вернуть «Abc» в качестве строкового значения и указать пустое числовое значение (которое в конечном итоге может быть установлено по умолчанию равным 0). Для строки «Abc[xy33]» синтаксический анализатор должен вернуть «Abc» в качестве строкового значения и указать недопустимое числовое значение. Для строки «Abc» синтаксический анализатор должен вернуть «Abc» в качестве строкового значения и указать отсутствующее числовое значение. Пробелы до/после или внутри скобок должны быть обрезаны "Abc [ 123 ] ".
Abc[12]
,Abc[int:123]
,Abc[bool: 5]
,Abc[float : 32 ]
. 29.08.2019