/// <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"); }
/// <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"); }
/// <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); }
/// <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 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"); }
/// <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); }
/// <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"))); }
/// <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); }