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);
        }
Exemple #3
0
        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);