Beispiel #1
0
        /// <summary>
        /// Returns regex pattern for 3-digit numbers from ones to ten-and ones. e.g. 117, 308 (NOT 120).
        /// </summary>
        /// <returns></returns>
        private string AllUpToOnesAndTenOnes()
        {
            string hundsGroup = RegexPatternCreator.ClosureQuestionMark(
                RegexPatternCreator.CreateGroup("", HundsPattern(),
                                                RegexPatternCreator.BetWordWSPlus, "و", RegexPatternCreator.BetWordWSPlus
                                                )
                );

            string tensGroup =
                RegexPatternCreator.ClosureQuestionMark(
                    RegexPatternCreator.CreateGroup("", TensPattern(),
                                                    RegexPatternCreator.BetWordWSPlus, "و", RegexPatternCreator.BetWordWSPlus
                                                    )
                    );

            string numberPattern =
                RegexPatternCreator.CreateGroup("", hundsGroup,
                                                RegexPatternCreator.CreateGroup("", RegexPatternCreator.CreateOR(true,
                                                                                                                 TenOnesPattern(),
                                                                                                                 RegexPatternCreator.CreateGroup("", tensGroup, OnesPattern())
                                                                                                                 ))
                                                );

            return(@"\b" + numberPattern + OrdinalityPattern() + @"\b");
        }
Beispiel #2
0
        /// <summary>
        /// Returns the whole pattern of a persian written number
        /// </summary>
        internal string PersianNumberPattern()
        {
            string ThreeDB      = ThreeDigitBlockPattern();
            string BlockAndMult = BlockPlusMultiplier();

            string MultPlus3DB =
                RegexPatternCreator.CreateGroup("",
                                                RegexPatternCreator.ClosurePlus(
                                                    RegexPatternCreator.CreateGroup("",
                                                                                    BlockAndMult, RegexPatternCreator.BetWordWSPlus, "و", RegexPatternCreator.BetWordWSPlus
                                                                                    )
                                                    ),
                                                RegexPatternCreator.ClosureQuestionMark(
                                                    ThreeDB
                                                    )
                                                );

            string MultPlus =
                RegexPatternCreator.CreateGroup("",
                                                BlockAndMult,
                                                RegexPatternCreator.ClosureStar(RegexPatternCreator.CreateGroup("",
                                                                                                                RegexPatternCreator.BetWordWSPlus, "و", RegexPatternCreator.BetWordWSPlus, BlockAndMult
                                                                                                                )),
                                                RegexPatternCreator.ClosureQuestionMark(RegexPatternCreator.CreateGroup("",
                                                                                                                        RegexPatternCreator.BetWordWSPlus, "و", RegexPatternCreator.BetWordWSPlus, ThreeDB
                                                                                                                        ))
                                                );

            string numberPattern = RegexPatternCreator.CreateGroup("",
                                                                   RegexPatternCreator.CreateOR(true, MultPlus, ThreeDB)
                                                                   );

            return(@"\b" + RegexPatternCreator.CreateOR(false, numberPattern, "(صفرم)", "(صفر)") + @"\b");
        }
Beispiel #3
0
        /// <summary>
        /// Returns the pattern for 10 mulitipliers from 20 to 90 ORed together.
        /// </summary>
        /// <returns></returns>
        private string TensPattern()
        {
            string writtenNum =
                RegexPatternCreator.CreateGroup(TENS_NAME,
                                                RegexPatternCreator.CreateOR(false, "بیست", "سی", "چهل", "پنجاه", "شصت", "هفتاد", "هشتاد", "نود"));

            return(writtenNum);
        }
Beispiel #4
0
        /// <summary>
        /// returns the regex pattern for numbers from 1 to 9.
        /// </summary>
        private string OnesPattern()
        {
            string writtenNum =
                RegexPatternCreator.CreateGroup(ONES_NAME,
                                                RegexPatternCreator.CreateOR(false, "یک", "دو", "سه", "چهار", "پنج", "شش", "شیش", "هفت", "هشت", "نه", "اول", "سوم"));

            return(writtenNum);
        }
Beispiel #5
0
        /// <summary>
        /// Returns the regex pattern for the numeric dates
        /// </summary>
        /// <returns></returns>
        private string NumericDatePattern()
        {
            string seprators1Pat = @"(?<sep1>/|-|\.)";
            string seprators2Pat = @"(?<sep2>/|-|\.)";
            string datePattern   = RegexPatternCreator.CreateGroup("NumericDate", @"(?<num1>\d+)", seprators1Pat, @"(?<num2>\d+)", seprators2Pat, @"(?<num3>\d+)");

            return(@"\b" + datePattern + @"\b");
        }
Beispiel #6
0
        /// <summary>
        /// Named As MULTIPLIER_NAME
        /// Containing only the grand coefficients ORed together, e.g. "میلیون", "میلیارد"
        /// </summary>
        private string MultipliersPattern()
        {
            string writtenNum =
                RegexPatternCreator.CreateGroup(MULTIPLIER_NAME,
                                                RegexPatternCreator.CreateOR(false, "هزار", "ملیون", "میلیون", "میلیارد", "ملیارد", "بلیون", "بیلیون", "ترلیارد", "تریلیارد", "تریلیون", "ترلیون"));

            return(writtenNum);
        }
Beispiel #7
0
        /// <summary>
        /// Returns the regex pattern for 10 to 19 ORed together
        /// </summary>
        /// <returns></returns>
        private string TenOnesPattern()
        {
            string writtenNum =
                RegexPatternCreator.CreateGroup(TENONES_NAME,
                                                RegexPatternCreator.CreateOR(false, "ده", "یازده", "دوازده", "سیزده", "چهارده", "پانزده", "پونزده", "شونزده", "هفده", "هجده", "نوزده", "شانزده", "هیفده", "هیجده", "هژده", "هیژده"));

            return(writtenNum);
        }
 /// <summary>
 /// Returns the regex pattern for the year part of the date,
 /// which can be either digits or written numbers in Persian.
 /// </summary>
 /// <returns></returns>
 private string YearPattern()
 {
     return(RegexPatternCreator.CreateGroup("Year",
                                            RegexPatternCreator.CreateOR(true,
                                                                         @"\d+",
                                                                         persianNumberParser.PersianNumberPattern()
                                                                         )
                                            ));
 }
Beispiel #9
0
        /// <summary>
        /// Returns the regex pattern of three-digit-blocks
        /// (i.e. umbers lower than 1000 which are main building blocks of larger numbers).
        /// </summary>
        /// <returns></returns>
        internal string ThreeDigitBlockPattern()
        {
            string numberPattern = RegexPatternCreator.CreateGroup(THREEDB_NAME,
                                                                   RegexPatternCreator.CreateOR(false,
                                                                                                AllUpToOnesAndTenOnes(), AllUpToTens(), HundsPattern(), @"\d\d?\d?"
                                                                                                )
                                                                   );

            return(@"\b" + numberPattern + @"\b");
        }
Beispiel #10
0
        /// <summary>
        /// returns the pattern that makes numbers ordinal. i.e. adds "م" and "ام" in the end.
        /// </summary>
        /// <returns></returns>
        private string OrdinalityPattern()
        {
            string ordinalityPat = RegexPatternCreator.ClosureQuestionMark(
                RegexPatternCreator.CreateGroup("",
                                                RegexPatternCreator.InWordWSStar,
                                                RegexPatternCreator.CreateGroup("", RegexPatternCreator.CreateOR(true, "م", "ام"))
                                                )
                );

            return(ordinalityPat);
        }
Beispiel #11
0
        /// <summary>
        /// Returns the regex pattern for the Week-day part in an English date.
        /// </summary>
        /// <returns></returns>
        public string WeekdayPattern()
        {
            string weekday =
                RegexPatternCreator.CreateGroup("Weekday",
                                                RegexPatternCreator.CreateOR(false,
                                                                             "saturday", "sunday", "monday", "tuesday", "wednesday", "thursday", "friday",
                                                                             "sat", "sun", "mon", "tue", "wed", "thu", "fri",
                                                                             "sat\\.", "sun\\.", "mon\\.", "tue\\.", "wed\\.", "thu\\.", "fri\\."));

            return(weekday);
        }
Beispiel #12
0
 /// <summary>
 /// Returns the pattern of 3-digit blocks plus the multipliers.
 /// Named As MULTIPLIER_GROUP_NAME
 /// </summary>
 private string BlockPlusMultiplier()
 {
     return
         (RegexPatternCreator.CreateGroup(MULTIPLIER_GROUP_NAME,
                                          RegexPatternCreator.CreateOR(true,
                                                                       RegexPatternCreator.CreateGroup("",
                                                                                                       ThreeDigitBlockPattern(), RegexPatternCreator.BetWordWSPlus, MultipliersPattern()
                                                                                                       ),
                                                                       "هزار"
                                                                       )
                                          ));
 }
 /// <summary>
 /// Returns the regex pattern for all possible month names in all the supported calendar types, ORed together.
 /// </summary>
 /// <returns></returns>
 private string MonthNamePattern()
 {
     return(RegexPatternCreator.CreateGroup("MonthName",
                                            RegexPatternCreator.CreateOR(false,
                                                                         "فروردین", "اردیبهشت", "خرداد", "تیر", "مرداد", "امرداد", "شهریور",
                                                                         "مهر", "آبان", "ابان", "آذر", "دی", "بهمن", "اسفند", "اسپند",
                                                                         "ژانویه", "جنوری", "فوریه", "فبروری", "مارس",
                                                                         "مارچ", "آوریل", "آپریل", "مه", "می", "ژوئن", "جون", "ژوئیه", "ژوییه", "جولای", "ژولای"
                                                                         , "اوت", "اگوست", "آگوست", "سپتامبر", "سپتمبر", "اکتبر", "نوامبر", "نومبر", "دسامبر", "دسبمر"
                                                                         , "محرم", "محرم‌الحرام", "محرم الحرام", "صفر", "ربیع‌الاول", "ربیع الاول"
                                                                         , "ربیع‌الثانی", "ربیع الثانی", "جمادی‌الاولی", "جمادی‌الاول", "جمادی الاولی", "جمادی الاول"
                                                                         , "جمادی‌الثانی", "جمادی الثانی", "رجب", "شعبان", "رمضان", "شوال", "ذی‌القعده", "ذی القعده", "ذو‌القعده"
                                                                         , "ذو القعده", "ذی‌الحجه", "ذوالحجه", "ذی الحجه", "ذو الحجه")));
 }
        /// <summary>
        /// Returns the complete regex date pattern in Persian.
        /// </summary>
        /// <returns></returns>
        private string PersianDatePattern()
        {
            string monthYearOptionalLiteral = RegexPatternCreator.CreateGroup("",
                                                                              RegexPatternCreator.ClosureQuestionMark(RegexPatternCreator.CreateGroup("",
                                                                                                                                                      RegexPatternCreator.BetWordWSPlus, "ماه")),
                                                                              RegexPatternCreator.ClosureQuestionMark(RegexPatternCreator.CreateGroup("",
                                                                                                                                                      RegexPatternCreator.BetWordWSPlus, "سال"))
                                                                              );

            string optionalWeekday = RegexPatternCreator.ClosureQuestionMark(RegexPatternCreator.CreateGroup("", WeekdayPattern(), RegexPatternCreator.BetWordWSPlus));
            string optionalYear    = RegexPatternCreator.ClosureQuestionMark(RegexPatternCreator.CreateGroup("", RegexPatternCreator.BetWordWSPlus, YearPattern()));
            string datePattern     = RegexPatternCreator.CreateGroup("PersianDate", optionalWeekday, DayNumPattern(), RegexPatternCreator.BetWordWSPlus, MonthNamePattern(), monthYearOptionalLiteral, optionalYear);

            return(@"\b" + datePattern + @"\b");
        }
        /// <summary>
        /// Returns regex pattern for week-day part of the date pattern
        /// </summary>
        /// <returns></returns>
        public string WeekdayPattern()
        {
            string weekdayDigits = "[12345۱۲۳۴۵]";
            string writtenNum    = RegexPatternCreator.CreateGroup("WeekdayNum", RegexPatternCreator.CreateOR(false, "یک", "دو", "سه", "چهار", "پنج", weekdayDigits));

            string weekday =
                RegexPatternCreator.CreateGroup("Weekday",
                                                RegexPatternCreator.CreateOR(true,
                                                                             RegexPatternCreator.CreateGroup("",
                                                                                                             RegexPatternCreator.ClosureQuestionMark(
                                                                                                                 RegexPatternCreator.CreateGroup("", writtenNum, RegexPatternCreator.InWordWSStar)
                                                                                                                 ),
                                                                                                             "شنبه"),
                                                                             "جمعه"));

            return(weekday);
        }
Beispiel #16
0
        /// <summary>
        /// Returns regex patterns for the multipliers of 100. e.g. سیصد، دویست، نهصد، صد
        /// </summary>
        /// <returns></returns>
        private string HundsPattern()
        {
            string writtenNum =
                RegexPatternCreator.CreateGroup(HUNDSNUM_NAME,
                                                RegexPatternCreator.CreateOR(false, "یک", "دو", "سی", "چهار", "پان", "پون", "پنج", "شش", "شیش", "هفت", "هشت", "نه"));
            string hunds =
                RegexPatternCreator.CreateGroup(HUNDS_NAME,
                                                RegexPatternCreator.CreateOR(true,
                                                                             RegexPatternCreator.CreateGroup("",
                                                                                                             RegexPatternCreator.ClosureQuestionMark(
                                                                                                                 RegexPatternCreator.CreateGroup("", writtenNum, RegexPatternCreator.InWordWSStar)
                                                                                                                 ),
                                                                                                             "صد"),
                                                                             "دویست", "سیصد"));

            return(hunds);
        }
Beispiel #17
0
        /// <summary>
        /// Returns the regex pattern for all possible month-names in all possible calendar types in English language, ORed together.
        /// </summary>
        /// <returns></returns>
        private string MonthNamePattern()
        {
            return(RegexPatternCreator.CreateGroup("MonthName",
                                                   RegexPatternCreator.CreateOR(true,

                                                                                "january", "jan", "jan\\.", "february", "feb", "feb\\.", "march", "mar", "mar\\.", "april", "apr", "apr\\.", "may",
                                                                                "june", "jun", "jun\\.", "july", "jul", "jul\\.", "august", "aug", "aug\\.", "september", "sep", "sep\\.", "october", "oct", "oct\\.",
                                                                                "november", "nov", "nov\\.", "december", "dec", "dec\\.",

                                                                                "farvardin", "ordibehesht", "khordād", "khordad", "tir", "mordād", "amordād", "mordad",
                                                                                "amordad", "shahrivar", "mehr", "aban", "aban", "āzar", "azar", "dey", "bahman", "esfand", "espand",

                                                                                "muharram", "muḥarram ul ḥaram", "muharram ul haram", "safar", "ṣafar ul muzaffar", "safar ul muzaffar",
                                                                                "rabi' al-awwal", "rabi' al-thani", "jumada al-ula", "jumada al-thani", "rajab",
                                                                                "rajab al murajab", "sha'aban", "sha'abān ul moazam", "sha'aban ul moazam", "ramadan", "ramazān",
                                                                                "ramaḍān ul mubarak", "ramadan ul mubarak", "ramazan", "ramazan ul mubarak", "shawwal",
                                                                                "shawwal ul mukarram", "dhu al-qi'dah", "dhu al-hijjah")));
        }
Beispiel #18
0
        /// <summary>
        /// Returns the complete regex pattern for an English date.
        /// </summary>
        /// <returns></returns>
        private string EnglishDatePattern()
        {
            string optionalWeekday =
                RegexPatternCreator.ClosureQuestionMark(RegexPatternCreator.CreateGroup("",
                                                                                        WeekdayPattern(),
                                                                                        RegexPatternCreator.ClosureQuestionMark(RegexPatternCreator.BetWordWSPlus),
                                                                                        RegexPatternCreator.ClosureQuestionMark(","),
                                                                                        RegexPatternCreator.BetWordWSPlus
                                                                                        ));
            string optionalYear =
                RegexPatternCreator.ClosureQuestionMark(RegexPatternCreator.CreateGroup("",
                                                                                        RegexPatternCreator.ClosureQuestionMark(RegexPatternCreator.BetWordWSPlus),
                                                                                        RegexPatternCreator.ClosureQuestionMark(","),
                                                                                        RegexPatternCreator.BetWordWSPlus,
                                                                                        YearPattern()));
            string datePattern = RegexPatternCreator.CreateGroup("EnglishDate", optionalWeekday, MonthNamePattern(), RegexPatternCreator.BetWordWSPlus, DayNumPattern(), optionalYear);


            return(@"\b" + datePattern + @"\b");
        }
Beispiel #19
0
 /// <summary>
 /// Returns the regex pattern for the day number (in month) in an English date, which can only be digits.
 /// </summary>
 /// <returns></returns>
 private string DayNumPattern()
 {
     return(RegexPatternCreator.CreateGroup("",
                                            RegexPatternCreator.CreateGroup("DayNum", @"\d\d?"),
                                            RegexPatternCreator.ClosureQuestionMark("th|st|rd|nd")));
 }
Beispiel #20
0
 /// <summary>
 /// Returns the regex pattern for the year part of an English date, which can only be digits.
 /// </summary>
 /// <returns></returns>
 private string YearPattern()
 {
     return(RegexPatternCreator.CreateGroup("Year",
                                            @"\d+"
                                            ));
 }
 /// <summary>
 /// Returns the regex pattern for the day-number (in month) part of the date description
 /// which can also be in persian written form.
 /// </summary>
 /// <returns></returns>
 private string DayNumPattern()
 {
     return(RegexPatternCreator.CreateGroup("DayNum", persianNumberParser.ThreeDigitBlockPattern()));
 }