/// <summary> /// Extracts and parses the day number from the given regex Match instance. /// </summary> /// <param name="m">The regex Match instance to extract day number from.</param> /// <returns></returns> private int ExtractDayNum(Match m) { int dayNum = -1; foreach (Capture c in m.Groups["DayNum"].Captures) { string value = c.Value; if (Char.IsDigit(value[0])) { int n; value = ParsingUtils.ConvertNumber2English(value); if (Int32.TryParse(value, out n)) { dayNum = n; } else { dayNum = -1; } } else { dayNum = -1; foreach (PersianNumberPatternInfo pi in persianNumberParser.FindAndParse(c.Value)) { dayNum = (int)pi.Number; } } } return(dayNum); }
/// <summary> /// Extracts and parses the week-day from the given regex Match instance. /// </summary> /// <param name="m">The regex Match instance to extract week-day from.</param> /// <returns></returns> private Weekdays ExtractWeekday(Match m) { Weekdays w = Weekdays.Illeagal; foreach (Capture c in m.Groups["Weekday"].Captures) { if (c.Value == "جمعه") { w = Weekdays.Fri; } if (c.Value == "شنبه") { w = Weekdays.Sat; } else { foreach (Capture cc in m.Groups["WeekdayNum"].Captures) { string value = cc.Value; if (Char.IsDigit(value[0])) { int n; value = ParsingUtils.ConvertNumber2English(value); if (Int32.TryParse(value, out n)) { w = NthWeekday(n); } else { w = Weekdays.Illeagal; } } else { Int64 n; if (PersianLiteral2NumMap.TryPersianString2Num(value, out n)) { w = NthWeekday((int)n); } else { w = Weekdays.Illeagal; } } } } } return(w); }
/// <summary> /// Extracts and parses the three digit block from the specified string. /// </summary> /// <param name="str">The string to extract number from.</param> /// <returns></returns> private long ExtractThreeDB(string str) { long num = 0L; long tempNum = 0L; if (Char.IsDigit(str[0])) { string strNum = ParsingUtils.ConvertNumber2English(str.Trim()); int n; if (Int32.TryParse(strNum, out n)) { num = (long)n; } } else { Regex regex = new Regex(ThreeDigitBlockPattern()); foreach (Match m in regex.Matches(str)) { foreach (Capture c in m.Groups[ONES_NAME].Captures) { if (PersianLiteral2NumMap.TryPersianString2Num(c.Value, out tempNum)) { num += tempNum; } } foreach (Capture c in m.Groups[TENS_NAME].Captures) { if (PersianLiteral2NumMap.TryPersianString2Num(c.Value, out tempNum)) { num += tempNum; } } foreach (Capture c in m.Groups[TENONES_NAME].Captures) { if (PersianLiteral2NumMap.TryPersianString2Num(c.Value, out tempNum)) { num += tempNum; } } num += ExtractHundreds(m); } } return(num); }
/// <summary> /// Searches the specified string for digitized number patterns, and tries to parse the patterns found. /// </summary> /// <param name="str">The string to be searched.</param> /// <returns>A sequence of <see cref="DigitizedNumberPatternInfo"/> objects which contain /// information about the patterns found.</returns> public IEnumerable <DigitizedNumberPatternInfo> FindAndParse(string str) { var l = new List <DigitizedNumberPatternInfo>(); var wordTokenizer = new WordTokenizer(WordTokenizerOptions.None); foreach (var wordInfo in wordTokenizer.Tokenize(str)) { if (wordInfo.IsNumber) { var refinedWord = PostProcessNumberWordInfo(wordInfo); double result; if (Double.TryParse(ParsingUtils.ConvertNumber2English(refinedWord.Value), out result)) { l.Add(new DigitizedNumberPatternInfo(refinedWord.Value, refinedWord.Index, refinedWord.Length, result)); } } } return(l); }
/// <summary> /// Extracts and parses the day number. /// </summary> /// <param name="m">The regex Match object to parse.</param> /// <returns></returns> private int ExtractDayNum(Match m) { int dayNum = -1; foreach (Capture c in m.Groups["DayNum"].Captures) { string value = c.Value; if (Char.IsDigit(value[0])) { int n; value = ParsingUtils.ConvertNumber2English(value); if (Int32.TryParse(value, out n)) { dayNum = n; } else { dayNum = -1; } } } return(dayNum); }