protected override NumberRange GetNumberRange(Match match, UnitCoderBase coder) { var start = GetNumber(match.Groups["start"], coder); var end = GetNumber(match.Groups["end"], coder); return(new NumberRange() { Start = new NumberValue(start.Value), End = new NumberValue(end.Value) }); }
protected override NumberRange GetNumberRange(Match match, UnitCoderBase coder) { NumberRange result = new NumberRange(); result.End = new NumberValue(GetNumber(match.Groups["end"], coder).Value); Group startGroup = match.Groups["from"]; if (startGroup.Success) { result.Start = new NumberValue(GetNumber(match.Groups["start"], coder).Value); } return(result); }
protected override NumberRange GetNumberRange(Match match, UnitCoderBase coder) { var number = new NumberValue(GetNumber(match.Groups["number"], coder).Value); NumberRange result = new NumberRange(); if (match.Groups["great"].Success) { result.Start = number; } else { result.End = number; } return(result); }
/// <summary> /// Получение числа из группы /// </summary> /// <param name="group">группа</param> /// <param name="coder">кодер юнитов</param> /// <returns>число</returns> protected Entity GetNumber(Group group, UnitCoderBase coder) { foreach (UnitTextBase unit in coder.GetUnits(group.Index, group.Length)) { if (unit.IsEntity) { Entity entity = (Entity)unit; if (entity.IsNumber()) { return(entity); } } } throw new InvalidOperationException("can't find numeric unit"); }
/// <summary> /// Выделение из текста интервалов чисел /// </summary> /// <param name="text">текст</param> /// <param name="coder">кодер юнитов</param> /// <returns>интервалы чисел</returns> public NumberRange[] GetNumberRanges(string text, UnitCoderBase coder) { List <NumberRange> result = new List <NumberRange>(); var collection = Expression.Matches(text); for (int i = 0; i < collection.Count; ++i) { var range = GetNumberRange(collection[i], coder); var units = coder.GetUnits(collection[i].Index, collection[i].Length); range.StartPosition = units.First().PositionInfo.Start; range.EndPosition = units.Last().PositionInfo.End; range.Text = units.GetTextWithSubText(); result.Add(range); } return(result.ToArray()); }
protected override NumberRange GetNumberRange(Match match, UnitCoderBase coder) { string baseNumber = GetNumber(match.Groups["base"], coder).Value; double baseValue = NumberParser.Parse(baseNumber); double delta = NumberParser.Parse(GetNumber(match.Groups["delta"], coder).Value); bool isExponential = baseNumber.ToUpper().Contains('E'); return(new NumberRange() { Start = new NumberValue(baseValue - delta) { IsExponential = isExponential }, End = new NumberValue(baseValue + delta) { IsExponential = isExponential } }); }
/// <summary> /// Получение интервала чисел /// </summary> /// <param name="match">результат работы регулярного выражения</param> /// <param name="coder">кодер юнитов</param> /// <returns>интервал чисел</returns> protected abstract NumberRange GetNumberRange(Match match, UnitCoderBase coder);