//all dates to dmy
//
WikiFunctions.Parse.HideText ht = new WikiFunctions.Parse.HideText(true, false, true);
public string ProcessArticle(string ArticleText, string ArticleTitle, int wikiNamespace, out string Summary, out bool Skip)
{
Skip = false;
Summary = "";
ArticleText = ht.Hide(ArticleText);
////User:Ohconfucius/AWB modules/dmy
ArticleText=Regex.Replace(ArticleText, @"(?i)\|df==y", "");
//protect dates
ArticleText=Regex.Replace(ArticleText, @"(?i)(\[\[September)( 11 attacks\|)", "$1♫$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(100\s)(crore club\D)", "$1♫$2");
// ArticleText=Regex.Replace(ArticleText, @"(?i)(september\s)(11\D)", "$1♫$2");
//fix common errors
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*author[ ]*=[ ]*(?:[A-Z]{2,3}\b))(?:[^|}]*)\d{4}, [\d\.:]{4,5}(?: |)[AP]M IST(?=\s*[|}])", "$1");
//rem superscripted ordinals
ArticleText=Regex.Replace(ArticleText, @"(?i)(\d)<sup>(th|st|nd|rd)<\/sup>", "$1$2");
//zap redundant {{date}}, {{accessdate}} {{retrieved}} and {{#dateformat}}
ArticleText=Regex.Replace(ArticleText, @"(?i)\{\{date\|((?:19|20)\d{2-[01]\d-[0-3]\d)[ ]*\}\}", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\{\{date\|([0-3]\d[\-\s]\w+|\w+[\-\s][0-3]\d)[ ]*\}\}", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\{\{date\|([^\{\}\|\-]+)(?:\|l?(?:[dmy]{3}|iso|none|link))?\}\}", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\{\{accessdate\|((?:19|20)\d{2-[01]\d-[0-3]\d)[ ]*\}\}", "Retrieved $1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\{\{retrieved[ ]*\|[ ]accessdate=([\-\w, ]*)\}\}", "Retrieved $1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\{\{#dateformat:([^\{\}\|]+)(?:\|dmy|\|mdy)?\}\}", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date[ ]*[^\=][ ]*|\w{2,}[ ]*)\{\{(?:start|end).date[^|}]*\|((?:1[789]|20)\d{2})\}\}", "$1$2");
//stripping start/end template
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[([12]?\d|30|31)(?:th|st|nd|rd|)(?:_| )(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)", "[[$1 $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)(?:_| )([12]?\d|30|31)(?:th|st|nd|rd|)", "[[$1 $2");
//month+day piped to month+day
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:[12]?\d|30|31)(?:th|st|nd|rd|)\s(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\|(\d{1,2}\s)(?:th|st|nd|rd|)(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\]\]", "[[$1$2]]");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s(?:[12]?\d|30|31)(?:th|st|nd|rd|)\|(\d{1,2}\s)(?:th|st|nd|rd|)(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\]\]", "[[$1$2]]");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[\d{1,2}\s(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\|(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)(\s\d{1,2})(?:th|st|nd|rd|)\]\]", "[[$1$2]]");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s(?:[12]?\d|30|31)(?:th|st|nd|rd|)\|(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)(\s\d{1,2})(?:th|st|nd|rd|)\]\]", "[[$1$2]]");
//month+day piped to number
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:[12]?\d|30|31)(?:th|st|nd|rd|)\s(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\|(\d{1,4})\]\]", "[[$1]]");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s(?:[12]?\d|30|31)(?:th|st|nd|rd|)\|(\d{1,4})\]\]", "[[$1]]");
//part dates
//remove leading zeros from dts templates
ArticleText=Regex.Replace(ArticleText, @"(?i)({{dts\d?\|[^}]*\|)0([^}]*}})", "$1$2");
//delink ISO dates
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[([12]\d{3}-\d\d-\d\d)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[([12]\d{3})\]\]-\[\[(\d\d-\d\d)\]\]", "$1-$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([12]\d{3})-\[\[(\d\d-\d\d)\]\]", "$1-$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[([12]\d{3})\]\]-(\d\d-\d\d)", "$1-$2");
//remove year in xxxx
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:1[7-9]|20)\d{2}\sin\s[^\|\]]+\|(\d{4})\]\]", "$1");
//remove dts1 template that links ISO dates
ArticleText=Regex.Replace(ArticleText, @"(?i)\{\{dts1\|(\d{4}-\d\d-\d\d)\}\}", "$1");
// century
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[((?:first|second|third|fourth|fifth|sixth|seventh|eighth|ninth|tenth|eleventh|twelfth|thirteenth|fourteenth|fifteenth|sixteenth|seventeenth|eighteenth|nineteenth|twentieth|twenty(?:\s|-)first)(?:\s|-))century\]\]", "$1century");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[((?:first|second|third|fourth|fifth|sixth|seventh|eighth|ninth|tenth|eleventh|twelfth|thirteenth|fourteenth|fifteenth|sixteenth|seventeenth|eighteenth|nineteenth|twentieth|twenty(?:\s|-)first)(?:\s|-))century\s(AD|BC|CE|BCE)\]\]", "$1century");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(\d{1,2}(?:st|nd|rd|th)(?:\s|-))century\]\]", "$1century");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(\d{1,2}(?:st|nd|rd|th)(?:\s|-))centuries\]\]", "$1centuries");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[\d{1,2}(?:st|nd|rd|th)(?:\s|-)century\|(\d{1,2}(?:st|nd|rd|th))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[\d{1,2}(?:st|nd|rd|th)(?:\s|-)century\|(\d{1,2}(?:st|nd|rd|th)(?:\s|-))century\]\]", "$1century");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[\d{1,2}(?:st|nd|rd|th)(?:\s|-)century\|(\d{1,2}(?:st|nd|rd|th)(?:\s|-))centuries\]\]", "$1centuries");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(\d{1,2}(?:st|nd|rd|th)(?:\s|-))century\s(AD|BC|CE|BCE)\]\]", "$1century $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[\d{1,2}(?:st|nd|rd|th)(?:\s|-)century\|(\d{1,2}(?:st|nd|rd|th)(?:\s|-))century\s(AD|BC|CE|BCE)\]\]", "$1century $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[\d{1,2}(?:st|nd|rd|th)(?:\s|-)century\|(\d{1,2}(?:st|nd|rd|th)(?:\s|-))centuries\s(AD|BC|CE|BCE)\]\]", "$1centuries $2");
// decades and years
ArticleText=Regex.Replace(ArticleText, @"\[\[(\d{1,3}0)\'?s\]\]", "$1s");
ArticleText=Regex.Replace(ArticleText, @"\[\[\d{1,3}0\'?s\|([^\]]{1,30})\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(\d{1,3}0)\'?(s)?[\s_]?(AD|BC|CE|BCE)\]\]", "$1$2 $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[\d{1,3}0\'?s?[\s_]?(?:AD|BC|CE|BCE)\|([^\]]{1,30})\]\]", "$1");
//year: now remove unprotected linked years
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[((?:1[0-9]|20)\d{2}|[1-9]\d{0,2})([\s_]?(?:AD|BC|CE|BCE)|)\]\]", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[\d{1,3}0\'?s?[\s_]?\(decade\)\|([^\]]{1,30})\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(\d{1,3}0)\'?s", "$1s");
// solitary day_numbers
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d{1,2}(?:th|st|nd|rd)\|(\d{1,2})(?:th|st|nd|rd)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[\d{1,2}(?:th|st|nd|rd)\s(?:January|February|March|April|May|June|July|August|September|October|November|December)\|(\d{1,2})(?:th|st|nd|rd)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(\d{1,2}(?:st|nd|rd|th))\]\]", "$1");
//month+year
//Identify surprise or 'Easter egg' diversions linking month+years to year articles. Turn them into month+year links to be dealt with below
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[\d{1,4}#[^\|\]]+\|((?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d{3,4})\]\]", "[[$1]]");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[((?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d{3,4})\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May\.?|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.?|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))\s\d{3,4}\|([^\]]{1,30})\]\]", "$1");
//removed piped years when in full date
ArticleText=Regex.Replace(ArticleText, @"(?i)(\[\[\d{1,2}\s(?:January|February|March|April|May|June|July|August|September|October|November|December)\]\],?\s?\[\[)[^\|\]]{1,32}\|(\d{1,4}\]\])", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d{1,2}\]\],?\s?\[\[)[^\|\]]{1,32}\|(\d{1,4}\]\])", "$1$2");
//remove piped years
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:19\d|20[01])\d in (?:aviation|baseball|film|literature|comics|ireland|india)\|((?:19|20)\d{2})\]\]", "$1");
//Identify surprise or 'Easter egg' diversions linking months to year articles.
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[\d{1,4}#[^\|\]]+\|(January|February|March|April|May|June|July|August|September|October|November|December)\]\]", "$1");
//Month+day_number "March 7th" -> "March 7"
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))\s(\d?\d)(?:th|st|nd|rd)\]\]", "[[$1 $2]]");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[((?:Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))\s\d?\d)\]\](?:th|st|nd|rd)", "[[$1]]");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(\d?\d)(?:th|st|nd|rd)\s(January|February|March|April|May|June|July|August|September|October|November|December)\]\]", "$1 $2");
//Remove nbsp within date strings
ArticleText=Regex.Replace(ArticleText, @"(?i)(\D\d{1,3})(th|st|nd|rd) (?=\w)", "$1$2 ");
ArticleText=Regex.Replace(ArticleText, @"(?i)(Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|)) (\d?\d(?:th|st|nd|rd|)\D)", "$1 $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\D\d?\d)(?:th|st|nd|rd|) (Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))(?=\W)", "$1 $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))\s* \s*((?:19\d|20[01])\d)(?=\D)", "$1 $2");
//(month yyyy-month yy)
ArticleText=Regex.Replace(ArticleText, @"(?i)\((Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May\.?|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.?|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))\s(20)([01]\d)\s?[-–]\s?(Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May\.?|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.?|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))\s([01]\d)\)", "($1 $2$3–$4 $2$5)");
ArticleText=Regex.Replace(ArticleText, @"(?i)\((Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May\.?|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.?|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))\s(19)([3-9]\d)\s?[-–]\s?(Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May\.?|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.?|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))\s([3-9]\d)\)", "($1 $2$3–$4 $2$5)");
ArticleText=Regex.Replace(ArticleText, @"(?i)\((Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May\.?|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.?|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))\s(19)(9\d)\s?[-–]\s?(Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May\.?|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.?|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))\s([01]\d)\)", "($1 $2$3–$4 20$5)");
ArticleText=Regex.Replace(ArticleText, @"(?:the\s?|)([1-2]?\d|30|31)(?:th|st|nd|rd|), ([1-2]?\d|30|31)(?:th|st|nd|rd|)(\s(?:and|&|to|or)\s[1-3]?\d)(?:th|st|nd|rd|)(?:\sof\s?)?\s(Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May\.?|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))(?=\W)", "$1, $2$3 $4");
ArticleText=Regex.Replace(ArticleText, @"(?:the\s?|)([1-2]?\d|30|31)(?:th|st|nd|rd|)(\s(?:and|&|to|or)\s|[-–])([1-3]?\d)(?:th|st|nd|rd|)(?:\sof\s?)?\s(Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May\.?|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))(?=\W)", "$1$2$3 $4");
ArticleText=Regex.Replace(ArticleText, @"(?:the\s?|)([1-2]?\d|30|31)(?:th|st|nd|rd|)(?:\sof\s?)\s(Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May\.?|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))(?=[^\|\]\w\d])", "$1 $2");
ArticleText=Regex.Replace(ArticleText, @"(?:the\s?|)([1-2]?\d|30|31)(?:th|st|nd|rd|)(?:\sof\s?)?\s(Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May\.?|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))(?=\W)", "$1 $2");
ArticleText=Regex.Replace(ArticleText, @"(Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May\.?|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))\s(?:the\s|)([1-2]?\d|30|31)(?:th|st|nd|rd|),\s(?:the\s|)([1-2]?\d|30|31)(?:th|st|nd|rd|)(\s(?:and|&|to|or)\s)(?:the\s|)([1-2]?\d|30|31)(?:th|st|nd|rd|)(?=[^\]\|\w\d]\D)", "$1 $2, $3$4 $5");
ArticleText=Regex.Replace(ArticleText, @"(Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May\.?|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))\s(?:the\s|)([1-2]?\d|30|31)(?:th|st|nd|rd|)(\s(?:and|&|to|or)\s)(?:the\s|)([1-2]?\d|30|31)(?:th|st|nd|rd|)(?=[^\]\|\w\d]\D)", "$1 $2$3$4");
ArticleText=Regex.Replace(ArticleText, @"(Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May\.?|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))\s(?:the\s|)([1-3]?\d)(?:th|st|nd|rd)(?=[^\]\|\w\d]\D)", "$1 $2");
ArticleText=Regex.Replace(ArticleText, @"(\s*=\s*)((?:19|20)\d\d),?\s+(Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May\.?|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))\s0?([1-2]?\d|3[01])(?=[\s\r\n]*[\|\}])", "$1$4 $3 $2");
ArticleText=Regex.Replace(ArticleText, @"(\s*\()((?:19|20)\d\d),?\s+(Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May\.?|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))\s0?([1-2]?\d|3[01])(?=\))", "$1$4 $3 $2");
//Month+day_number piped into number. Preferences do not work. They don't work in sequence because digits in the two dates must be adjacent
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\[]{4})\[\[((?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d?\d)\]\](\s?\-?\s?)\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d{1,2}(?:th|st|nd|rd)\|(\d{1,2}(?:th|st|nd|rd))\]\]", "$1$2$3$4");
//same again but with ndash or mdash instead of hyphen
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\[]{4})\[\[((?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d?\d)\]\](\s?&[nm]dash;\s?)\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d{1,2}(?:th|st|nd|rd)\|(\d{1,2}(?:th|st|nd|rd))\]\]", "$1$2$3$4");
//same again but with slash instead of hyphen
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\[]{4})\[\[((?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d?\d)\]\](\/)\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d{1,2}(?:th|st|nd|rd)\|(\d{1,2}(?:th|st|nd|rd))\]\]", "$1$2$3$4");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\[]{4})\[\[((?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d?\d)\]\](\s?\-?\s?)\[\[(\d{1,2}(?:th|st|nd|rd))\]\]", "$1$2$3$4");
//same again but with ndash instead of hyphen
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\[]{4})\[\[((?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d?\d)\]\](\s?&[nm]dash;\s?)\[\[(\d{1,2})\]\]", "$1$2$3$4");
//same again but with slash instead of hyphen
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\[]{4})\[\[((?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d?\d)\]\](\/)\[\[(\d{1,2}(?:th|st|nd|rd))\]\]", "$1$2$3$4");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\[]{4})\[\[(\d?\d)\s(?:January|February|March|April|May|June|July|August|September|October|November|December)\]\](\s?\-?\s?)\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d{1,2}(?:th|st|nd|rd)\|(\d{1,2}(?:th|st|nd|rd))\]\]", "$1$2$3$4");
//same again but with ndash instead of hyphen
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\[]{4})\[\[(\d?\d)\s(?:January|February|March|April|May|June|July|August|September|October|November|December)\]\](\s?&[nm]dash;\s?)\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d{1,2}(?:th|st|nd|rd)\|(\d{1,2}(?:th|st|nd|rd))\]\]", "$1$2$3$4");
//same again but with slash instead of hyphen
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\[]{4})\[\[(\d?\d)\s(?:January|February|March|April|May|June|July|August|September|October|November|December)\]\](\/)\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d{1,2}(?:th|st|nd|rd)\|(\d{1,2}(?:th|st|nd|rd))\]\]", "$1$2$3$4");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\[]{4})\[\[(\d?\d)\s(?:January|February|March|April|May|June|July|August|September|October|November|December)\]\](\s?\-?\s?)\[\[(\d{1,2}(?:th|st|nd|rd))\]\]", "$1$2$3$4");
//same again but with ndash instead of hyphen
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\[]{4})\[\[(\d?\d)\s(?:January|February|March|April|May|June|July|August|September|October|November|December)\]\](\s?&[nm]dash;\s?)\[\[(\d{1,2}(?:th|st|nd|rd))\]\]", "$1$2$3$4");
//same again but with slash instead of hyphen
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\[]{4})\[\[(\d?\d)\s(?:January|February|March|April|May|June|July|August|September|October|November|December)\]\](\/)\[\[(\d{1,2}(?:th|st|nd|rd))\]\]", "$1$2$3$4");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d{1,2}(?:th|st|nd|rd)\|(\d{1,2}(?:th|st|nd|rd))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[\d{1,2}(?:th|st|nd|rd)\s(?:January|February|March|April|May|June|July|August|September|October|November|December)\|(\d{1,2}(?:th|st|nd|rd))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d{1,2}(?:th|st|nd|rd)\|((?:Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{1,2}(?:th|st|nd|rd))\]\]", "$1");
//month+day piped into month+day or vice versa
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[\d{1,2}(?:th|st|nd|rd)\s(?:January|February|March|April|May|June|July|August|September|October|November|December)\|((?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d{1,2}(?:th|st|nd|rd))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\s\d{1,2}(?:th|st|nd|rd)\|(\d{1,2}(?:th|st|nd|rd)\s(?:January|February|March|April|May|June|July|August|September|October|November|December))\]\]", "$1");
//4 digit years piped into 2
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[\d{1,4}\|(\d{1,2}(?:th|st|nd|rd))\]\]", "$1");
//full dates with incorrect 'year in'
ArticleText=Regex.Replace(ArticleText, @"(?i)(\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\s(?:[0-3][\d]|[\d])\]\]),\s\[\[(\d{1,4})\sin\s[^\]]{1,32}\]\]", "$1 $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\[\[(?:[0-3][\d]|[\d])\s(?:January|February|March|April|May|June|July|August|September|October|November|December)\]\])\s\[\[(\d{1,4})\sin\s[^\]]{1,32}\]\]", "$1 $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\[\[(?:[0-3][\d]|[\d])\s(?:January|February|March|April|May|June|July|August|September|October|November|December)\]\])\s{{(?:avyear|by|fy|ly|scy|sdy)\|(\d{1,4})}}", "$1 [[$2]]");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\s(?:[0-3][\d]|[\d])\]\]),\s\{\{(?:avyear|by|fy|ly|scy|sdy)\|(\d{1,4})\}\}", "$1 [[$2]]");
//insert comma to separate date from army unit
ArticleText=Regex.Replace(ArticleText, @"(?i)(January|February|March|April|May|June|July|August|September|October|November|December) (the \d\d*@th (?:Air(?:borne|)|Arm(?:ou?red|y)|Artillery|Battalion|Brigade|Co(?:mpan|)y|Division|Fleet|Group|Infantry|Land|Panzer|Regiment|Squadron|Sqn)\b)", "$1, $2");
// remove nowrap template from dm and md dates
ArticleText=Regex.Replace(ArticleText, @"(?i)(date=)\{\{(?:j|nowrap)\|(?:([0-2]?\d|30|31)(?:[ _]| )(January|February|March|April|May|June|July|August|September|October|November|December))\}\}", "$1$2 $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date=)\{\{(?:j|nowrap)\|(?:(January|February|March|April|May|June|July|August|September|October|November|December)(?:[ _]| )([0-2]?\d|30|31))\}\}", "$1$2 $3");
//remove leading zero from linked date
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s0(\d)(?:th|st|nd|rd|)\]\]", "[[$1 $2]]");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[0(\d)(?:th|st|nd|rd|)\s(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\]\]", "[[$1 $2]]");
//delink dates
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s(\d?\d)(?:th|st|nd|rd|)(?:\]\],?\s?\[\[|,?\s)(\d{1,4})\]\]", "$1 $2, $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s(\d?\d)(?:th|st|nd|rd|)\]\],?\s?(\d{1,4})(\W)", "$1 $2, $3$4");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s(\d?\d)(?:th|st|nd|rd|)\]\]", "$1 $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(\d?\d)(?:th|st|nd|rd|)\s(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)(?:\]\],?\s?\[\[|,?\s)(\d{1,4})\]\]", "$1 $2 $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(\d?\d)(?:th|st|nd|rd|)\s(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\]\],?\s?(\d{1,4})(\W)", "$1 $2 $3$4");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(\d?\d)(?:th|st|nd|rd|)\s(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\]\]", "$1 $2");
//change deprecated birth and death templates
ArticleText=Regex.Replace(ArticleText, @"(?i)\|mf=ye?s?", "");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\{\{(?:Birth|Death|launch|release|start|end|film date|Wayback)[^\}\|]*\|)", "$1df=yes|");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\{\{(?:Birth|Death|launch|release|start|end|film date|Wayback)[^\}\|]*\|)df=ye?s?\|([^}]*df=ye?s?)", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\{\{(?:start.date|end.date)\|)df=ye?s?\|((?:1[789]|20)\d{2}\}\})", "$1$2");
// eliminating time of day
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*author[ ]*=[ ]*)(?:posted|published)(?: by| on)[\s:]\s*(?=\w)", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*(?:date|archivedate|accessdate|author)[ ]*=[ ]*)[0-2]?\d:[0-5]\d(?:[ ]| )(?:[ap]m |[ap]\.m\. |)([A-Z]{1,2}T|UTC)[\.,]?[ ]?", "$1");
// eliminating days of the week
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*(?:date|archivedate|accessdate|author)[ ]*=[ ]*)(?:(?:Mon|Tues|Wednes|Thurs|Fri|Satur|Sun)day,?)\s", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*(?:date|archivedate|accessdate|author)[ ]*=[ ]*)(?:(?:Mon|Tues?|Wed|Thur?|Fri|Sat|Sun)[\.,]?)\s", "$1");
// eliminating dates placed in author parameter
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|\s*author\s*=\s*)@month @day,? @yyyy\s?(?:,? \d?\d:\d\d(?:\s*| )(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|)|)\|", "|");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|\s*author\s*=\s*)@day @month,? @yyyy\s?(?:,? \d?\d:\d\d(?:\s*| )(?:[apAP][mM]\s*|)(?:GMT\s*|UTC\s*|[A-Z]{1,2}[DS]T\s*|)|)\|", "|");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*(?:date|archivedate|accessdate)[ ]*=[ ]*)([1-9]|[1-2][0-9]|30|31) Jan\.? ([1-2][0-9]{3})(?=\s*[\|\}])", "$1$2 January $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*(?:date|archivedate|accessdate)[ ]*=[ ]*)([1-9]|[1-2][0-9]|30|31) Feb\.? ([1-2][0-9]{3})(?=\s*[\|\}])", "$1$2 February $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*(?:date|archivedate|accessdate)[ ]*=[ ]*)([1-9]|[1-2][0-9]|30|31) Mar\.? ([1-2][0-9]{3})(?=\s*[\|\}])", "$1$2 March $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*(?:date|archivedate|accessdate)[ ]*=[ ]*)([1-9]|[1-2][0-9]|30|31) Apr\.? ([1-2][0-9]{3})(?=\s*[\|\}])", "$1$2 April $3");
// ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*(?:date|archivedate|accessdate)[ ]*=[ ]*)([1-9]|[1-2][0-9]|30|31) @Month ([1-2][0-9]{3})(?=\s*[\|\}])", "$1$2 Fullmonth $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*(?:date|archivedate|accessdate)[ ]*=[ ]*)([1-9]|[1-2][0-9]|30|31) @Jun\.? ([1-2][0-9]{3})(?=\s*[\|\}])", "$1$2 June $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*(?:date|archivedate|accessdate)[ ]*=[ ]*)([1-9]|[1-2][0-9]|30|31) (?:Jly|Jul\.?) ([1-2][0-9]{3})(?=\s*[\|\}])", "$1$2 July $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*(?:date|archivedate|accessdate)[ ]*=[ ]*)([1-9]|[1-2][0-9]|30|31) Aug\.? ([1-2][0-9]{3})(?=\s*[\|\}])", "$1$2 August $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*(?:date|archivedate|accessdate)[ ]*=[ ]*)([1-9]|[1-2][0-9]|30|31) Sep. ([1-2][0-9]{3})(?=\s*[\|\}])", "$1$2 September $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*(?:date|archivedate|accessdate)[ ]*=[ ]*)([1-9]|[1-2][0-9]|30|31) Oct\.? ([1-2][0-9]{3})(?=\s*[\|\}])", "$1$2 October $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*(?:date|archivedate|accessdate)[ ]*=[ ]*)([1-9]|[1-2][0-9]|30|31) Nov\.? ([1-2][0-9]{3})(?=\s*[\|\}])", "$1$2 November $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*(?:date|archivedate|accessdate)[ ]*=[ ]*)([1-9]|[1-2][0-9]|30|31) Dec\.? ([1-2][0-9]{3})(?=\s*[\|\}])", "$1$2 December $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref[^>]*>(?:[^<]+?[\s\(]|))([1-9]|[1-2][0-9]|30|31) Jan\.? ([1-2][0-9]{3})(?=(?:[^\w\/\-%,<][^<]*?|)<\/ref>)", "$1$2 January $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref[^>]*>(?:[^<]+?[\s\(]|))([1-9]|[1-2][0-9]|30|31) Feb\.? ([1-2][0-9]{3})(?=(?:[^\w\/\-%,<][^<]*?|)<\/ref>)", "$1$2 February $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref[^>]*>(?:[^<]+?[\s\(]|))([1-9]|[1-2][0-9]|30|31) Mar\.? ([1-2][0-9]{3})(?=(?:[^\w\/\-%,<][^<]*?|)<\/ref>)", "$1$2 March $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref[^>]*>(?:[^<]+?[\s\(]|))([1-9]|[1-2][0-9]|30|31) Apr\.? ([1-2][0-9]{3})(?=(?:[^\w\/\-%,<][^<]*?|)<\/ref>)", "$1$2 April $3");
// ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref[^>]*>(?:[^<]+?[\s\(]|))([1-9]|[1-2][0-9]|30|31) May ([1-2][0-9]{3})(?=(?:[^\w\/\-%,<][^<]*?|)<\/ref>)", "$1$2 Fullmonth $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref[^>]*>(?:[^<]+?[\s\(]|))([1-9]|[1-2][0-9]|30|31) Jun\.? ([1-2][0-9]{3})(?=(?:[^\w\/\-%,<][^<]*?|)<\/ref>)", "$1$2 June $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref[^>]*>(?:[^<]+?[\s\(]|))([1-9]|[1-2][0-9]|30|31) (?:Jly|Jul\.?) ([1-2][0-9]{3})(?=(?:[^\w\/\-%,<][^<]*?|)<\/ref>)", "$1$2 July $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref[^>]*>(?:[^<]+?[\s\(]|))([1-9]|[1-2][0-9]|30|31) Aug\.? ([1-2][0-9]{3})(?=(?:[^\w\/\-%,<][^<]*?|)<\/ref>)", "$1$2 August $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref[^>]*>(?:[^<]+?[\s\(]|))([1-9]|[1-2][0-9]|30|31) Sep. ([1-2][0-9]{3})(?=(?:[^\w\/\-%,<][^<]*?|)<\/ref>)", "$1$2 September $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref[^>]*>(?:[^<]+?[\s\(]|))([1-9]|[1-2][0-9]|30|31) Oct\.? ([1-2][0-9]{3})(?=(?:[^\w\/\-%,<][^<]*?|)<\/ref>)", "$1$2 October $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref[^>]*>(?:[^<]+?[\s\(]|))([1-9]|[1-2][0-9]|30|31) Nov\.? ([1-2][0-9]{3})(?=(?:[^\w\/\-%,<][^<]*?|)<\/ref>)", "$1$2 November $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref[^>]*>(?:[^<]+?[\s\(]|))([1-9]|[1-2][0-9]|30|31) Dec\.? ([1-2][0-9]{3})(?=(?:[^\w\/\-%,<][^<]*?|)<\/ref>)", "$1$2 December $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)([ ]\()([1-9]|[1-2][0-9]|30|31) Jan\.? ([1-2][0-9]{3})(?=\)\W)", "$1$2 January $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)([ ]\()([1-9]|[1-2][0-9]|30|31) Feb\.? ([1-2][0-9]{3})(?=\)\W)", "$1$2 February $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)([ ]\()([1-9]|[1-2][0-9]|30|31) Mar\.? ([1-2][0-9]{3})(?=\)\W)", "$1$2 March $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)([ ]\()([1-9]|[1-2][0-9]|30|31) Apr\.? ([1-2][0-9]{3})(?=\)\W)", "$1$2 April $3");
// ArticleText=Regex.Replace(ArticleText, @"(?i)([ ]\()([1-9]|[1-2][0-9]|30|31) @Month ([1-2][0-9]{3})(?=\)\W)", "$1$2 Fullmonth $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)([ ]\()([1-9]|[1-2][0-9]|30|31) Jun\.? ([1-2][0-9]{3})(?=\)\W)", "$1$2 June $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)([ ]\()([1-9]|[1-2][0-9]|30|31) (?:Jly|Jul\.?) ([1-2][0-9]{3})(?=\)\W)", "$1$2 July $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)([ ]\()([1-9]|[1-2][0-9]|30|31) Aug\.? ([1-2][0-9]{3})(?=\)\W)", "$1$2 August $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)([ ]\()([1-9]|[1-2][0-9]|30|31) Sep\.? ([1-2][0-9]{3})(?=\)\W)", "$1$2 September $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)([ ]\()([1-9]|[1-2][0-9]|30|31) Oct\.? ([1-2][0-9]{3})(?=\)\W)", "$1$2 October $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)([ ]\()([1-9]|[1-2][0-9]|30|31) Nov\.? ([1-2][0-9]{3})(?=\)\W)", "$1$2 November $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)([ ]\()([1-9]|[1-2][0-9]|30|31) Dec\.? ([1-2][0-9]{3})(?=\)\W)", "$1$2 December $3");
//Slashes
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/0?1\/([12]\d{3})(?![\w\d-])", "$1 January $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/0?2\/([12]\d{3})(?![\w\d-])", "$1 February $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/0?3\/([12]\d{3})(?![\w\d-])", "$1 March $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/0?4\/([12]\d{3})(?![\w\d-])", "$1 April $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/0?5\/([12]\d{3})(?![\w\d-])", "$1 May $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/0?6\/([12]\d{3})(?![\w\d-])", "$1 June $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/0?7\/([12]\d{3})(?![\w\d-])", "$1 July $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/0?8\/([12]\d{3})(?![\w\d-])", "$1 August $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/0?9\/([12]\d{3})(?![\w\d-])", "$1 September $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/10\/([12]\d{3})(?![\w\d-])", "$1 October $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/11\/([12]\d{3})(?![\w\d-])", "$1 November $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/12\/([12]\d{3})(?![\w\d-])", "$1 December $2");
//2-digit year – UK style
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/0?1\/([4-9]\d)(?![\w\d-])", "$1 January 19$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/0?2\/([4-9]\d)(?![\w\d-])", "$1 February 19$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/0?3\/([4-9]\d)(?![\w\d-])", "$1 March 19$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/0?4\/([4-9]\d)(?![\w\d-])", "$1 April 19$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/0?5\/([4-9]\d)(?![\w\d-])", "$1 May 19$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/0?6\/([4-9]\d)(?![\w\d-])", "$1 June 19$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/0?7\/([4-9]\d)(?![\w\d-])", "$1 July 19$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/0?8\/([4-9]\d)(?![\w\d-])", "$1 August 19$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/0?9\/([4-9]\d)(?![\w\d-])", "$1 September 19$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/10\/([4-9]\d)(?![\w\d-])", "$1 October 19$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/11\/([4-9]\d)(?![\w\d-])", "$1 November 19$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/12\/([4-9]\d)(?![\w\d-])", "$1 December 19$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/0?1\/([01]\d)(?![\w\d-])", "$1 January 20$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/0?2\/([01]\d)(?![\w\d-])", "$1 February 20$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/0?3\/([01]\d)(?![\w\d-])", "$1 March 20$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/0?4\/([01]\d)(?![\w\d-])", "$1 April 20$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/0?5\/([01]\d)(?![\w\d-])", "$1 May 20$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/0?6\/([01]\d)(?![\w\d-])", "$1 June 20$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/0?7\/([01]\d)(?![\w\d-])", "$1 July 20$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/0?8\/([01]\d)(?![\w\d-])", "$1 August 20$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/0?9\/([01]\d)(?![\w\d-])", "$1 September 20$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/10\/([01]\d)(?![\w\d-])", "$1 October 20$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/11\/([01]\d)(?![\w\d-])", "$1 November 20$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\w-](?:1[3-9]|[2-3]\d))\/12\/([01]\d)(?![\w\d-])", "$1 December 20$2");
//numerical format with hyphens and dashes (dd-mm-yyyy) to dmy
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([0-2]?\d|30|31)[\-–]0?1[\-–]([1-2]\d{3})(?=\s*[\|\}])", "$1$2 January $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([0-2]?\d)[\-–]0?2[\-–]([1-2]\d{3})(?=\s*[\|\}])", "$1$2 February $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([0-2]?\d|30|31)[\-–]0?3[\-–]([1-2]\d{3})(?=\s*[\|\}])", "$1$2 March $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([0-2]?\d|30|31)[\-–]0?4[\-–]([1-2]\d{3})(?=\s*[\|\}])", "$1$2 April $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([0-2]?\d|30|31)[\-–]0?5[\-–]([1-2]\d{3})(?=\s*[\|\}])", "$1$2 May $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([0-2]?\d|30|31)[\-–]0?6[\-–]([1-2]\d{3})(?=\s*[\|\}])", "$1$2 June $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([0-2]?\d|30|31)[\-–]0?7[\-–]([1-2]\d{3})(?=\s*[\|\}])", "$1$2 July $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([0-2]?\d|30|31)[\-–]0?8[\-–]([1-2]\d{3})(?=\s*[\|\}])", "$1$2 August $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([0-2]?\d|30|31)[\-–]0?9[\-–]([1-2]\d{3})(?=\s*[\|\}])", "$1$2 September $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([0-2]?\d|30|31)[\-–]10[\-–]([1-2]\d{3})(?=\s*[\|\}])", "$1$2 October $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([0-2]?\d|30|31)[\-–]11[\-–]([1-2]\d{3})(?=\s*[\|\}])", "$1$2 November $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([0-2]?\d|30|31)[\-–]12[\-–]([1-2]\d{3})(?=\s*[\|\}])", "$1$2 December $3");
//improperly formatted access dates with endashes (yyyy–mm–dd) and/or missing zeros to ISO
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*accessdate[ ]*=[ ]*)([1-2]\d{3})[–—]([0-2]?\d)[–—]([0-2]?\d|30|31)(?=\s*[\|\}])", "$1$2-$3-$4"); //ndashes and emdashes
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*accessdate[ ]*=[ ]*)([1-2]\d{3})-(\d)-([0-2]\d|30|31)(?=\s*[\|\}])", "$1$2-0$3-$4"); //ndashes and emdashes
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*accessdate[ ]*=[ ]*)([1-2]\d{3})-([0-1]\d)-(\d)(?=\s*[\|\}])", "$1$2-$3-0$4"); //ndashes and emdashes
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*accessdate[ ]*=[ ]*)([1-2]\d{3})-(\d)-(\d)(?=\s*[\|\}])", "$1$2-0$3-0$4"); //ndashes and emdashes
//improperly formatted dates with endashes (yyyy–mm–dd) and/or missing zeros to dmy
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})–0?1–([0-2]?\d|30|31)(?=\s*[\|\}])", "$1$3 January $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})–0?2–([0-2]?\d)(?=\s*[\|\}])", "$1$3 February $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})–0?3–([0-2]?\d|30|31)(?=\s*[\|\}])", "$1$3 March $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})–0?4–([0-2]?\d|30|31)(?=\s*[\|\}])", "$1$3 April $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})–0?5–([0-2]?\d|30|31)(?=\s*[\|\}])", "$1$3 May $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})–0?6–([0-2]?\d|30|31)(?=\s*[\|\}])", "$1$3 June $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})–0?7–([0-2]?\d|30|31)(?=\s*[\|\}])", "$1$3 July $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})–0?8–([0-2]?\d|30|31)(?=\s*[\|\}])", "$1$3 August $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})–0?9–([0-2]?\d|30|31)(?=\s*[\|\}])", "$1$3 September $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})–10–([0-2]?\d|30|31)(?=\s*[\|\}])", "$1$3 October $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})–11–([0-2]?\d|30|31)(?=\s*[\|\}])", "$1$3 November $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})–12–([0-2]?\d|30|31)(?=\s*[\|\}])", "$1$3 December $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})[\-–]0?1[\-–]([1-9])(?=\s*[\|\}])", "$1$3 January $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})[\-–]0?2[\-–]([1-9])(?=\s*[\|\}])", "$1$3 February $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})[\-–]0?3[\-–]([1-9])(?=\s*[\|\}])", "$1$3 March $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})[\-–]0?4[\-–]([1-9])(?=\s*[\|\}])", "$1$3 April $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})[\-–]0?5[\-–]([1-9])(?=\s*[\|\}])", "$1$3 May $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})[\-–]0?6[\-–]([1-9])(?=\s*[\|\}])", "$1$3 June $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})[\-–]0?7[\-–]([1-9])(?=\s*[\|\}])", "$1$3 July $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})[\-–]0?8[\-–]([1-9])(?=\s*[\|\}])", "$1$3 August $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})[\-–]0?9[\-–]([1-9])(?=\s*[\|\}])", "$1$3 September $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})[\-–]10[\-–]([1-9])(?=\s*[\|\}])", "$1$3 October $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})[\-–]11[\-–]([1-9])(?=\s*[\|\}])", "$1$3 November $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})[\-–]12[\-–]([1-9])(?=\s*[\|\}])", "$1$3 December $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})[\-–]1[\-–]([0-2]?\d|30|31)(?=\s*[\|\}])", "$1$3 January $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})[\-–]2[\-–](0?[1-9]|[1-2]\d)(?=\s*[\|\}])", "$1$3 February $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})[\-–]3[\-–]([0-2]?\d|30|31)(?=\s*[\|\}])", "$1$3 March $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})[\-–]4[\-–]([0-2]?\d|30|31)(?=\s*[\|\}])", "$1$3 April $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})[\-–]5[\-–]([0-2]?\d|30|31)(?=\s*[\|\}])", "$1$3 May $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})[\-–]6[\-–]([0-2]?\d|30|31)(?=\s*[\|\}])", "$1$3 June $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})[\-–]7[\-–]([0-2]?\d|30|31)(?=\s*[\|\}])", "$1$3 July $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})[\-–]8[\-–]([0-2]?\d|30|31)(?=\s*[\|\}])", "$1$3 August $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})[\-–]9[\-–]([0-2]?\d|30|31)(?=\s*[\|\}])", "$1$3 September $2");
//ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})[\-–]10[\-–]([0-2]?\d|30|31)(?=\s*[\|\}])", "$1$3 October $2");
//ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})[\-–]11[\-–]([0-2]?\d|30|31)(?=\s*[\|\}])", "$1$3 November $2");
//ArticleText=Regex.Replace(ArticleText, @"(?i)(\s*=\s*)([1-2]\d{3})[\-–]12[\-–]([0-2]?\d|30|31)(?=\s*[\|\}])", "$1$3 December $2");
//yyyymmdd_to_dmy
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*(?:archive|access|)date[ ]*=[ ]*|retrieved (?:on |))(?:\[\[)?([1-2][0-9]{3})(?:\]\]-\[\[|-)0?1-(0[1-9]|[1-2][0-9]|30|31)(?:\]\])?", "$1$3 January $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*(?:archive|access|)date[ ]*=[ ]*|retrieved (?:on |))(?:\[\[)?([1-2][0-9]{3})(?:\]\]-\[\[|-)0?2-(0[1-9]|[1-2][0-9]|30|31)(?:\]\])?", "$1$3 February $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*(?:archive|access|)date[ ]*=[ ]*|retrieved (?:on |))(?:\[\[)?([1-2][0-9]{3})(?:\]\]-\[\[|-)0?3-(0[1-9]|[1-2][0-9]|30|31)(?:\]\])?", "$1$3 March $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*(?:archive|access|)date[ ]*=[ ]*|retrieved (?:on |))(?:\[\[)?([1-2][0-9]{3})(?:\]\]-\[\[|-)0?4-(0[1-9]|[1-2][0-9]|30|31)(?:\]\])?", "$1$3 April $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*(?:archive|access|)date[ ]*=[ ]*|retrieved (?:on |))(?:\[\[)?([1-2][0-9]{3})(?:\]\]-\[\[|-)0?5-(0[1-9]|[1-2][0-9]|30|31)(?:\]\])?", "$1$3 May $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*(?:archive|access|)date[ ]*=[ ]*|retrieved (?:on |))(?:\[\[)?([1-2][0-9]{3})(?:\]\]-\[\[|-)0?6-(0[1-9]|[1-2][0-9]|30|31)(?:\]\])?", "$1$3 June $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*(?:archive|access|)date[ ]*=[ ]*|retrieved (?:on |))(?:\[\[)?([1-2][0-9]{3})(?:\]\]-\[\[|-)0?7-(0[1-9]|[1-2][0-9]|30|31)(?:\]\])?", "$1$3 July $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*(?:archive|access|)date[ ]*=[ ]*|retrieved (?:on |))(?:\[\[)?([1-2][0-9]{3})(?:\]\]-\[\[|-)0?8-(0[1-9]|[1-2][0-9]|30|31)(?:\]\])?", "$1$3 August $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*(?:archive|access|)date[ ]*=[ ]*|retrieved (?:on |))(?:\[\[)?([1-2][0-9]{3})(?:\]\]-\[\[|-)0?9-(0[1-9]|[1-2][0-9]|30|31)(?:\]\])?", "$1$3 September $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*(?:archive|access|)date[ ]*=[ ]*|retrieved (?:on |))(?:\[\[)?([1-2][0-9]{3})(?:\]\]-\[\[|-)10-(0[1-9]|[1-2][0-9]|30|31)(?:\]\])?", "$1$3 October $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*(?:archive|access|)date[ ]*=[ ]*|retrieved (?:on |))(?:\[\[)?([1-2][0-9]{3})(?:\]\]-\[\[|-)11-(0[1-9]|[1-2][0-9]|30|31)(?:\]\])?", "$1$3 November $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*(?:archive|access|)date[ ]*=[ ]*|retrieved (?:on |))(?:\[\[)?([1-2][0-9]{3})(?:\]\]-\[\[|-)12-(0[1-9]|[1-2][0-9]|30|31)(?:\]\])?", "$1$3 December $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date[ ]*=[ ]*)(0[1-9]|[1-2][0-9]|30|31)-0?1-([1-2][0-9]{3})?", "$1$2 January $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date[ ]*=[ ]*)(0[1-9]|[1-2][0-9])-0?2-([1-2][0-9]{3})?", "$1$2 February $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date[ ]*=[ ]*)(0[1-9]|[1-2][0-9]|30|31)-0?3-([1-2][0-9]{3})?", "$1$2 March $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date[ ]*=[ ]*)(0[1-9]|[1-2][0-9]|30|31)-0?4-([1-2][0-9]{3})?", "$1$2 April $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date[ ]*=[ ]*)(0[1-9]|[1-2][0-9]|30|31)-0?5-([1-2][0-9]{3})?", "$1$2 May $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date[ ]*=[ ]*)(0[1-9]|[1-2][0-9]|30|31)-0?6-([1-2][0-9]{3})?", "$1$2 June $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date[ ]*=[ ]*)(0[1-9]|[1-2][0-9]|30|31)-0?7-([1-2][0-9]{3})?", "$1$2 July $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date[ ]*=[ ]*)(0[1-9]|[1-2][0-9]|30|31)-0?8-([1-2][0-9]{3})?", "$1$2 August $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date[ ]*=[ ]*)(0[1-9]|[1-2][0-9]|30|31)-0?9-([1-2][0-9]{3})?", "$1$2 September $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date[ ]*=[ ]*)(0[1-9]|[1-2][0-9]|30|31)-10-([1-2][0-9]{3})?", "$1$2 October $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date[ ]*=[ ]*)(0[1-9]|[1-2][0-9]|30|31)-11-([1-2][0-9]{3})?", "$1$2 November $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date[ ]*=[ ]*)(0[1-9]|[1-2][0-9]|30|31)-12-([1-2][0-9]{3})?", "$1$2 December $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date[ ]*=[ ]*)([1-2][0-9]{3}) (January )(0[1-9]|[1-2][0-9]|30|31)", "$1$4 $3$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date[ ]*=[ ]*)([1-2][0-9]{3}) (February )(0[1-9]|[1-2][0-9])", "$1$4 $3$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date[ ]*=[ ]*)([1-2][0-9]{3}) (March )(0[1-9]|[1-2][0-9]|30|31)", "$1$4 $3$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date[ ]*=[ ]*)([1-2][0-9]{3}) (April )(0[1-9]|[1-2][0-9]|30|31)", "$1$4 $3$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date[ ]*=[ ]*)([1-2][0-9]{3}) (May )(0[1-9]|[1-2][0-9]|30|31)", "$1$4 $3$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date[ ]*=[ ]*)([1-2][0-9]{3}) (June )(0[1-9]|[1-2][0-9]|30|31)", "$1$4 $3$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date[ ]*=[ ]*)([1-2][0-9]{3}) (July )(0[1-9]|[1-2][0-9]|30|31)", "$1$4 $3$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date[ ]*=[ ]*)([1-2][0-9]{3}) (August )(0[1-9]|[1-2][0-9]|30|31)", "$1$4 $3$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date[ ]*=[ ]*)([1-2][0-9]{3}) (September )(0[1-9]|[1-2][0-9]|30|31)", "$1$4 $3$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date[ ]*=[ ]*)([1-2][0-9]{3}) (October )(0[1-9]|[1-2][0-9]|30|31)", "$1$4 $3$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date[ ]*=[ ]*)([1-2][0-9]{3}) (November )(0[1-9]|[1-2][0-9]|30|31)", "$1$4 $3$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date[ ]*=[ ]*)([1-2][0-9]{3}) (December )(0[1-9]|[1-2][0-9]|30|31)", "$1$4 $3$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([^\d\w\/\-%,])([12]\d{3}-\d\d-\d\d)(<\s?\/ref.*?>)", "$1$2 $3");
//code to convert ref ISO-dates outside citation templates
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref.*?>[^<]+?)(\s\()([12]\d{3})-01-0(\d)(\)[^\w\/\-%,])([^<]*?<\s?\/ref.*?>)", "$1$2$4 January $3$5$6");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref.*?>[^<]+?)(\s\()([12]\d{3})-02-0(\d)(\)[^\w\/\-%,])([^<]*?<\s?\/ref.*?>)", "$1$2$4 February $3$5$6");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref.*?>[^<]+?)(\s\()([12]\d{3})-03-0(\d)(\)[^\w\/\-%,])([^<]*?<\s?\/ref.*?>)", "$1$2$4 March $3$5$6");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref.*?>[^<]+?)(\s\()([12]\d{3})-04-0(\d)(\)[^\w\/\-%,])([^<]*?<\s?\/ref.*?>)", "$1$2$4 April $3$5$6");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref.*?>[^<]+?)(\s\()([12]\d{3})-05-0(\d)(\)[^\w\/\-%,])([^<]*?<\s?\/ref.*?>)", "$1$2$4 May $3$5$6");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref.*?>[^<]+?)(\s\()([12]\d{3})-06-0(\d)(\)[^\w\/\-%,])([^<]*?<\s?\/ref.*?>)", "$1$2$4 June $3$5$6");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref.*?>[^<]+?)(\s\()([12]\d{3})-07-0(\d)(\)[^\w\/\-%,])([^<]*?<\s?\/ref.*?>)", "$1$2$4 July $3$5$6");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref.*?>[^<]+?)(\s\()([12]\d{3})-08-0(\d)(\)[^\w\/\-%,])([^<]*?<\s?\/ref.*?>)", "$1$2$4 August $3$5$6");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref.*?>[^<]+?)(\s\()([12]\d{3})-09-0(\d)(\)[^\w\/\-%,])([^<]*?<\s?\/ref.*?>)", "$1$2$4 September $3$5$6");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref.*?>[^<]+?)(\s\()([12]\d{3})-10-0(\d)(\)[^\w\/\-%,])([^<]*?<\s?\/ref.*?>)", "$1$2$4 October $3$5$6");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref.*?>[^<]+?)(\s\()([12]\d{3})-11-0(\d)(\)[^\w\/\-%,])([^<]*?<\s?\/ref.*?>)", "$1$2$4 November $3$5$6");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref.*?>[^<]+?)(\s\()([12]\d{3})-12-0(\d)(\)[^\w\/\-%,])([^<]*?<\s?\/ref.*?>)", "$1$2$4 December $3$5$6");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref.*?>[^<]+?)(\s\()([12]\d{3})-01-([1-3]\d)(\)[^\w\/\-%,])([^<]*?<\s?\/ref.*?>)", "$1$2$4 January $3$5$6");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref.*?>[^<]+?)(\s\()([12]\d{3})-02-([1-3]\d)(\)[^\w\/\-%,])([^<]*?<\s?\/ref.*?>)", "$1$2$4 February $3$5$6");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref.*?>[^<]+?)(\s\()([12]\d{3})-03-([1-3]\d)(\)[^\w\/\-%,])([^<]*?<\s?\/ref.*?>)", "$1$2$4 March $3$5$6");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref.*?>[^<]+?)(\s\()([12]\d{3})-04-([1-3]\d)(\)[^\w\/\-%,])([^<]*?<\s?\/ref.*?>)", "$1$2$4 April $3$5$6");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref.*?>[^<]+?)(\s\()([12]\d{3})-05-([1-3]\d)(\)[^\w\/\-%,])([^<]*?<\s?\/ref.*?>)", "$1$2$4 May $3$5$6");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref.*?>[^<]+?)(\s\()([12]\d{3})-06-([1-3]\d)(\)[^\w\/\-%,])([^<]*?<\s?\/ref.*?>)", "$1$2$4 June $3$5$6");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref.*?>[^<]+?)(\s\()([12]\d{3})-07-([1-3]\d)(\)[^\w\/\-%,])([^<]*?<\s?\/ref.*?>)", "$1$2$4 July $3$5$6");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref.*?>[^<]+?)(\s\()([12]\d{3})-08-([1-3]\d)(\)[^\w\/\-%,])([^<]*?<\s?\/ref.*?>)", "$1$2$4 August $3$5$6");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref.*?>[^<]+?)(\s\()([12]\d{3})-09-([1-3]\d)(\)[^\w\/\-%,])([^<]*?<\s?\/ref.*?>)", "$1$2$4 September $3$5$6");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref.*?>[^<]+?)(\s\()([12]\d{3})-10-([1-3]\d)(\)[^\w\/\-%,])([^<]*?<\s?\/ref.*?>)", "$1$2$4 October $3$5$6");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref.*?>[^<]+?)(\s\()([12]\d{3})-11-([1-3]\d)(\)[^\w\/\-%,])([^<]*?<\s?\/ref.*?>)", "$1$2$4 November $3$5$6");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref.*?>[^<]+?)(\s\()([12]\d{3})-12-([1-3]\d)(\)[^\w\/\-%,])([^<]*?<\s?\/ref.*?>)", "$1$2$4 December $3$5$6");
//convert md-mdy date ranges to dm-dmy
ArticleText=Regex.Replace(ArticleText, @"(?i)(\D\W)(Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))\s([0-2]?\d|30|31)(?:th|st|nd|rd|)((?:,?\s[0-3]?\d(?:th|st|nd|rd|)){0,6}),?(\/|\s?(?:[-–]|–)\s?|\s(?:and|to|&)\s)([0-2]?\d|30|31)(?:th|st|nd|rd|),?\s(?:of\s|)(\d{3,4}\W\D)", "$1$3$4$5$6 $2 $7");
//test code ArticleText=Regex.Replace(ArticleText, @"(?i)(\D\W)(Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))\s([0-2]?\d|30|31)(?:th|st|nd|rd|)((?:,?\s[0-3]?\d(?:th|st|nd|rd|)){0,6}),? ([0-2]?\d|30|31)(?:th|st|nd|rd|),?\s(?:of\s)?(\d{3,4}\W\D)", "$1$3$4, $5 $2$6");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\D\W)(Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))\s([0-2]?\d|30|31)(?:th|st|nd|rd|)((?:,?\s[0-3]?\d(?:th|st|nd|rd|)){0,6}), ([0-2]?\d|30|31)(?:th|st|nd|rd|)(?=\W\D|[ ]*\r)", "$1$3$4, $5 $2");
//convert md,d,d, date ranges to d,d,dm (multiple, separated by commas)
ArticleText=Regex.Replace(ArticleText, @"(?i)(\D\W)(Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))\s([1-2]?\d|30|31)(?:th|st|nd|rd|)((?:,?\s[0-3]?\d(?:th|st|nd|rd|)){0,6}),?(\/|\s?(?:[-–]|–)\s?|\s(?:and|to|&)\s)([0-2]?\d|30|31)(?:th|st|nd|rd|)(?=\W\D|[ ]*\r)", "$1$3$4$5$6 $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\D\W)(Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))((?:\s[1-3]?\d(?:th|st|nd|rd|),?){1,6})(\s(?:and|to|&|–)\s)([0-2]?\d|30|31)(?:th|st|nd|rd|)(?=\W\D|[ ]*\r)", "$1$3$4$5 $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\D\W)(Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))\s([1-2]?\d|30|31)(?:th|st|nd|rd|)((?:,?\s[1-3]?\d(?:th|st|nd|rd|)){1,6})(?=\W\D|[ ]*\r)", "$1$3$4 $2");
//convert md date ranges to dm (simple, separated by hyphens and dashes or 'to')
ArticleText=Regex.Replace(ArticleText, @"(?i)(\D\W)(Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))\s([1-2]?\d|30|31)(?:th|st|nd|rd|)(\s?(?:[-–]|–)\s?|\sto\s)(?:\2\s|)([0-2]?\d|30|31)(?:th|st|nd|rd|)(?=\W\D|[ ]*\r)", "$1$3 $4$5 $2");
//'md, md,' to 'dm, dm,'
ArticleText=Regex.Replace(ArticleText, @"(?i)(\D)( (Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|)))( [0-2]?\d|30|31),( (Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|)))( [0-2]?\d|30|31)([,\.]\W\D)", "$1$3$2,$5$4,$6");
//convert simple mdy dates to dmy
ArticleText=Regex.Replace(ArticleText, @"(?i)(\D\W)(Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))\s([0-2]?\d|30|31)(?:th|st|nd|rd|),?\s(\d{1,4}\s?(?:AD|BC|CE|BCE)\W\D)", "$1$3 $2 $4");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\D\W)(Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))\s([0-2]?\d|30|31)(?:th|st|nd|rd|),?\s([12]\d{3})(?=\W\D|[ ]*\r)", "$1$3 $2 $4");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\D\W)(Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))\s([0-2]?\d|30|31)(?:th|st|nd|rd|)(?=\W\D|[ ]*\r)", "$1$3 $2");
//Month+day_number "March 7th" -> "March 7"
ArticleText=Regex.Replace(ArticleText, @"(?i)(\D\W)([0-2]?\d|30|31)(?:th|st|nd|rd|)\s(Jan(?:uary|.)|Feb(?:ruary|.)|Mar(?:ch|.)|Apr(?:il|.)|May|June?|July?|Aug(?:ust|.)|Sep(?:tember|.)|Oct(?:ober|.)|Nov(?:ember|.)|Dec(?:ember|.))(\W\D)", "$1$2 $3$4");
//year
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[([12]?\d{1,3})\]\]", "$1");
//expand month names
ArticleText=Regex.Replace(ArticleText, @"(?i)(date ?= ?[1-3]?\d )Jan (\d{4})", "$1 January $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date ?= ?[1-3]?\d )Feb (\d{4})", "$1 February $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date ?= ?[1-3]?\d )Mar (\d{4})", "$1 March $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date ?= ?[1-3]?\d )Apr (\d{4})", "$1 April $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date ?= ?[1-3]?\d )Jun (\d{4})", "$1 June $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date ?= ?[1-3]?\d )Jul (\d{4})", "$1 July $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date ?= ?[1-3]?\d )Aug (\d{4})", "$1 August $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date ?= ?[1-3]?\d )Sep (\d{4})", "$1 September $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date ?= ?[1-3]?\d )Oct (\d{4})", "$1 October $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(date ?= ?[1-3]?\d )(Sept|Nov|Dec) (\d{4})", "$1 $2ember $3");
//remove leading zero from nonlinked date
ArticleText=Regex.Replace(ArticleText, @"(?i)(\D\W)0(\d)(?:th|st|nd|rd|)\s(Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))\s(\d{4})(?=\W\D|[ ]*\r)", "$1$2 $3 $4");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\D\W)0(\d)(?:th|st|nd|rd|)\s(Jan(?:uary|\.|)|Feb(?:ruary|\.|)|Mar(?:ch|\.|)|Apr(?:il|\.|)|May|Jun(?:e|\.|)|Jul(?:y|\.|)|Aug(?:ust|\.|)|Sep(?:tember|\.|t\.|)|Oct(?:ober|\.|)|Nov(?:ember|\.|)|Dec(?:ember|\.|))(?=\W\D|[ ]*\r)", "$1$2 $3");
//rem duplicated months in date formats //code not functioning as intended
ArticleText=Regex.Replace(ArticleText, @"(?i)([1-2]?\d|30|31)(?:th|st|nd|rd|)\s(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)\s+(to|[\-–—])\s+([1-2]?\d|30|31)(?:th|st|nd|rd|)\s\2(?=\W)", "$1 $3 $4 $2");
//rem ordinals and redundant spaces (and commas) in date ranges
ArticleText=Regex.Replace(ArticleText, @"(?i)(\D)0?([1-2]?\d|30|31)(?:th|st|nd|rd|)\s+(to|[\-–—])\s+0?([1-2]?\d|30|31)(?:th|st|nd|rd|)\s(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)(?=\W)", "$1$2 $3 $4 $5");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\D)0?([1-2]?\d|30|31)(?:th|st|nd|rd|)\s(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?),\s?(\d{3,4})(?=\W)", "$1$2 $3 $4");
//replace 'as of [date]' with 'updated [date]'
ArticleText=Regex.Replace(ArticleText, @"(?i)(\'\')As of ([0-2]?\d|30|31)\s(Jan(?:uary|.)|Feb(?:ruary|.)|Mar(?:ch|.)|Apr(?:il|.)|May|June?|July?|Aug(?:ust|.)|Sep(?:tember|.)|Oct(?:ober|.)|Nov(?:ember|.)|Dec(?:ember|.))\s?(20\d{2})(?=\.?\')", "$1Updated $2 $3 $4");
//remove Crores and Lakhs in templates converting to USD
ArticleText=Regex.Replace(ArticleText, @"\{\{INR Convert[ ]*\|[ ]*", "{{INRConvert|"); //removing spaces (redirects to shortcut)
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|-?\d{2,})8\.[5-9]\d*[ ]*(\|c(?:\|-?\d|)\}\})", "${1}9$2");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|-?\d{2,})7\.[5-9]\d*[ ]*(\|c(?:\|-?\d|)\}\})", "${1}8$2");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|-?\d{2,})6\.[5-9]\d*[ ]*(\|c(?:\|-?\d|)\}\})", "${1}7$2");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|-?\d{2,})5\.[5-9]\d*[ ]*(\|c(?:\|-?\d|)\}\})", "${1}6$2");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|-?\d{2,})4\.[5-9]\d*[ ]*(\|c(?:\|-?\d|)\}\})", "${1}5$2");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|-?\d{2,})3\.[5-9]\d*[ ]*(\|c(?:\|-?\d|)\}\})", "${1}4$2");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|-?\d{2,})2\.[5-9]\d*[ ]*(\|c(?:\|-?\d|)\}\})", "${1}3$2");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|-?\d{2,})1\.[5-9]\d*[ ]*(\|c(?:\|-?\d|)\}\})", "${1}2$2");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|-?\d{2,})0\.[5-9]\d*[ ]*(\|c(?:\|-?\d|)\}\})", "${1}1$2");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|-?\d{3,})\.[0-4]\d*[ ]*(\|c(?:\|-?\d|)\}\})", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|)(-?\d+)0000[ ]*\|l(\|-?\d|)(?:\|nolink=yes|)((?:\|year=\d{4}|)\}\})", "$1$2|b$3$4");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|)(-?\d+)(\d\d)[0-4][ ]*\|l(\|-?\d|)(?:\|nolink=yes|)((?:\|year=\d{4}|)\}\})", "$1$2$3|m$3$4");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|)(-?\d{2,})[0-4][ ]*\|l(\|-?\d|)(?:\|nolink=yes|)((?:\|year=\d{4}|)\}\})", "$1$2|m$3$4");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|)(-?\d+)0[ ]*\|l(\|-?\d|)(?:\|nolink=yes|)((?:\|year=\d{4}|)\}\})", "$1$2|m$3$4");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|)(-?\d+)(\d)[ ]*\|l(\|-?\d|)(?:\|nolink=yes|)((?:\|year=\d{4}|)\}\})", "$1$2.$3|m$4$5");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|)(-?\d+)[ ]*\|l(\|-?\d|)(?:\|nolink=yes|)((?:\|year=\d{4}|)\}\})", "$1${2}00000$3$4");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|)(-?\d+)\.(\d)0?[ ]*\|l(\|-?\d|)(?:\|nolink=yes|)((?:\|year=\d{4}|)\}\})", "$1$2${3}0000$4$5");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|)(-?\d+)\.(\d)(\d)[ ]*\|l(\|-?\d|)(?:\|nolink=yes|)((?:\|year=\d{4}|)\}\})", "$1$2$3${4}000$5$6");
// ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|)(-?\d+)(\d)[ ]*\|l(\|-?\d|)(?:\|nolink=yes|)((?:\|year=\d{4}|)\}\})", "$1$2.$3|m$4$5");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|)(-?\d+)\.(\d)[ ]*\|c(\|-?\d|)(?:\|nolink=yes|)((?:\|year=\d{4}|)\}\})", "$1$2$3|m$4$5");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|)(-?\d+)\.(\d)(\d+)[ ]*\|c(\|-?\d|)(?:\|nolink=yes|)((?:\|year=\d{4}|)\}\})", "$1$2$3.$4|m$5$6");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|)(-?\d+)0[0-4][ ]*\|c(\|-?\d|)(?:\|nolink=yes|)((?:\|year=\d{4}|)\}\})", "$1$2|b$3$4");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|)(-?\d+)(\d)0[ ]*\|c(\|-?\d|)(?:\|nolink=yes|)((?:\|year=\d{4}|)\}\})", "$1$2.$3|b$4$5");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|)(-?\d{3,})([0-4]\d)[ ]*\|c(\|-?\d|)(?:\|nolink=yes|)((?:\|year=\d{4}|)\}\})", "$1$2|b$4$5");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|)(-?\d+)(\d\d)[ ]*\|c(\|-?\d|)(?:\|nolink=yes|)((?:\|year=\d{4}|)\}\})", "$1$2.$3|b$4$5");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|)(-?\d+)[ ]*\|c(\|-?\d|)(?:\|nolink=yes|)((?:\|year=\d{4}|)\}\})", "$1${2}0|m$3$4");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|-?\d{2,})8\.[5-9]\d*[ ]*(\|[bm](?:\|-?\d|)\}\})", "${1}9$2");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|-?\d{2,})7\.[5-9]\d*[ ]*(\|[bm](?:\|-?\d|)\}\})", "${1}8$2");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|-?\d{2,})6\.[5-9]\d*[ ]*(\|[bm](?:\|-?\d|)\}\})", "${1}7$2");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|-?\d{2,})5\.[5-9]\d*[ ]*(\|[bm](?:\|-?\d|)\}\})", "${1}6$2");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|-?\d{2,})4\.[5-9]\d*[ ]*(\|[bm](?:\|-?\d|)\}\})", "${1}5$2");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|-?\d{2,})3\.[5-9]\d*[ ]*(\|[bm](?:\|-?\d|)\}\})", "${1}4$2");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|-?\d{2,})2\.[5-9]\d*[ ]*(\|[bm](?:\|-?\d|)\}\})", "${1}3$2");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|-?\d{2,})1\.[5-9]\d*[ ]*(\|[bm](?:\|-?\d|)\}\})", "${1}2$2");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|-?\d{2,})0\.[5-9]\d*[ ]*(\|[bm](?:\|-?\d|)\}\})", "${1}1$2");
ArticleText=Regex.Replace(ArticleText, @"(\{INRConvert\|-?\d{3,})\.[0-4]\d*[ ]*(\|[bm](?:\|-?\d|)\}\})", "$1$2");
//remove Crores and Lahks not in templates
ArticleText=Regex.Replace(ArticleText, @"(?i)(\d+)[ ]?(?:lakh|\[\[lakh\]\])[\- ](?:crores?|\[\[crores?\]\])", "$1 trillion ([[Long and short scales|short scale]])");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\d+)(\d),?(\d)\d{2}(?:\.\d{,2}|)[ ]?(?:lacs?\b|lakhs?\b|\[\[lakh(?:\|l|\|lac|)\]\]s?)", "$1.$2$3 billion");
ArticleText=Regex.Replace(ArticleText, @"(?i)(?:(\d+),|)(\d{2,})(\d)(?:\.[0-4]\d|)[ ]?(?:lacs?\b|lakhs?\b|\[\[lakh(?:\|l|\|lac|)\]\]s?)", "$1$2.$3 million");
ArticleText=Regex.Replace(ArticleText, @"(?i)(?:(\d+),|)(\d+)\.(\d)[ ]?(?:lacs?\b|lakhs?\b|\[\[lakh(?:\|l|\|lac|)\]\]s?)", "$1$2${3}0,000");
ArticleText=Regex.Replace(ArticleText, @"(?i)(?:(\d+),|)(\d+)\.(\d)(\d)[ ]?(?:lacs?\b|lakhs?\b|\[\[lakh(?:\|l|\|lac|)\]\]s?)", "$1$2$3$4,000");
ArticleText=Regex.Replace(ArticleText, @"(?i)(?:(\d+),|)(\d+)0,000[ ]?(?:lacs?\b|lakhs?\b|\[\[lakh(?:\|l|\|lac|)\]\]s?)", "$1$2 billion");
ArticleText=Regex.Replace(ArticleText, @"(?i)(?:(\d+),|)(\d+)0[ ]?(?:lacs?\b|lakhs?\b|\[\[lakh(?:\|l|\|lac|)\]\]s?)", "$1$2 million");
ArticleText=Regex.Replace(ArticleText, @"(?i)(?:(\d+),|)(\d+)(\d)[ ]?(?:lacs?\b|lakhs?\b|\[\[lakh(?:\|l|\|lac|)\]\]s?)", "$1$2.$3 million");
ArticleText=Regex.Replace(ArticleText, @"(?i)(?:(\d+),|)(\d+)[ ]?(?:lacs?\b|lakhs?\b|\[\[lakh(?:\|l|\|lac|)\]\]s?)", "$1${2}00,000");
ArticleText=Regex.Replace(ArticleText, @"(?i)(?:(\d+),|)(\d+)(\d)[ ]?(?:lacs?\b|lakhs?\b|\[\[lakh(?:\|l|\|lac|)\]\]s?)", "$1$2.$3 million");
ArticleText=Regex.Replace(ArticleText, @"(?i)(?:(\d+),|)(\d+)\.(\d)[0-4]?[ ]?(?:crores?|\[\[crore(?:\|cr|\|crores|)\]\]s?)", "$1$2$3 million");
ArticleText=Regex.Replace(ArticleText, @"(?i)(?:(\d+),|)(\d+)\.(\d)(\d+)[ ]?(?:crores?|\[\[crore(?:\|cr|\|crores|)\]\]s?)", "$1$2$3.$4 million");
ArticleText=Regex.Replace(ArticleText, @"(?i)(?:(\d+),|)(\d+)0[0-4][ ]?(?:crores?|\[\[crore(?:\|cr|\|crores|)\]\]s?)", "$1$2 billion");
ArticleText=Regex.Replace(ArticleText, @"(?i)(?:(\d+),|)(\d+)(\d\d)[ ]?(?:crores?|\[\[crore(?:\|cr|\|crores|)\]\]s?)", "$1$2.$3 billion");
ArticleText=Regex.Replace(ArticleText, @"(?i)(?:(\d+),|)(\d+)[ ]?(?:crores?|\[\[crore(?:\|cr|\|crores|)\]\]s?)", "$1${2}0 million");
ArticleText=Regex.Replace(ArticleText, @"(?i)\b(one)[ ](?:lacs?\b|lakhs?|\[\[lakhs?(?:\|l|\|lac|)\]\])", "$1 hundred thousand");
ArticleText=Regex.Replace(ArticleText, @"(?i)(?:one)[ ]?(?:crores?|\[\[crore(?:\|cr|\|crores|)\]\]s?)", "ten million");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\d+,|)(\d{3,})\.[0-4]\d?( [bm]illion)", "$1$2$3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\d+,|)(\d{2,})1\.[5-9]\d?( [bm]illion)", "$1${2}2$3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\d+,|)(\d{2,})2\.[5-9]\d?( [bm]illion)", "$1${2}3$3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\d+,|)(\d{2,})3\.[5-9]\d?( [bm]illion)", "$1${2}4$3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\d+,|)(\d{2,})4\.[5-9]\d?( [bm]illion)", "$1${2}5$3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\d+,|)(\d{2,})5\.[5-9]\d?( [bm]illion)", "$1${2}6$3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\d+,|)(\d{2,})6\.[5-9]\d?( [bm]illion)", "$1${2}7$3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\d+,|)(\d{2,})7\.[5-9]\d?( [bm]illion)", "$1${2}8$3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\d+,|)(\d{2,})8\.[5-9]\d?( [bm]illion)", "$1${2}9$3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\d+,|)(\d+)\.0[0-4]?( [bm]illion)", "$1$2$3");
// Indian commas
ArticleText=Regex.Replace(ArticleText, @"(?i)(\W)(\d{1,3}),(\d\d),(\d\d),(\d\d),(\d\d),(\d\d\d)(?=[ \.,])", "$1{{formatnum:$2$3$4$5$6$7}}");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\W)(\d{1,3}),(\d\d),(\d\d),(\d\d),(\d\d\d)(?=[ \.,])", "$1{{formatnum:$2$3$4$5$6}}");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\W)(\d{1,3}),(\d\d),(\d\d),(\d\d\d)(?=[ \.,])", "$1{{formatnum:$2$3$4$5}}");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\W)(\d\d?),(\d\d),(\d\d\d)(?=[ \.,]|\/-)", "$1{{formatnum:$2$3$4}}");
ArticleText=Regex.Replace(ArticleText, @"(?i)([$£₤¥€]) (\d)", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(\{\{(?:INR|Indian Rupee)\}\}|Rs\.?) (\d+)", "$1$2");
// removing references to other WP articles and 'external' WP links
ArticleText=Regex.Replace(ArticleText, @"(?i)<ref>https?:\/\/\w{2}\.wik(?:ipedia|tionary)\.org\/wiki\/[^\s\]<]*<\/ref>", "");
ArticleText=Regex.Replace(ArticleText, @"(?i)<ref>\[https?:\/\/\w{2}\.wik(?:ipedia|tionary)\.org\/wiki\/[^\s\]]*[ ]+[\w\d][^\]]*\]<\/ref>", "");
ArticleText=Regex.Replace(ArticleText, @"(?i)[ ]\[https?:\/\/en\.wikipedia\.org\/wiki\/[^\s\]]*[ ]+([\w][^\]]*)\]", " [[$1]]");
//unprotect certain dates
ArticleText=Regex.Replace(ArticleText, @"(?i)(.)♫(.)", "$1$2");
//de-tagging for 'Use dmy dates|date='
ArticleText=Regex.Replace(ArticleText, @"(?i)\{\{(use (dmy|mdy) dates|dmy|mdy)(\|[^}]*)?\}\}\n?", "");
ArticleText=Regex.Replace(ArticleText, @"(?i)\{\{(use (British( \(Oxford\)|)|Indian|Irish) English|EngvarB)(\|[^}]*)?\}\}\n?", "");
ArticleText=Regex.Replace(ArticleText, @"(?i)\{\{reflist\|\d\}\}", "{{reflist|30em}}");
///General formatting
//adding piping to parentheticals
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[([^\[\]\(\)\|:]*)[ _](\([^\[\]\(\)\|]*(?:album|band|born \d{4}|film|magazine|newspaper|song)\))(\]\])", "[[$1 $2|$1$3"); //adding piping to parentheticals
//add correct hyphenation
ArticleText=Regex.Replace(ArticleText, @"\b([2-9]|\d{2,3}|half|quarter|two|three|four|five|six|seven|eight|nine|ten) (minute|hour|day|week|month|year|litre|litre|degree|inch|foot|yard|mile|metre|metre|man|page|point|word|dollar|cent|floor|store?y|room)\b", "$1-$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\b(two|three|four|five|six|seven|eight|nine|ten) (halves|thirds|quarters|(?:four|fif|six|seven|eigh|nin|ten)ths)\b", "$1-$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\b((?:[2-9]|\d{2,3})-(?:month|year)) (old)\b", "$1-$2");
ArticleText=Regex.Replace(ArticleText, @"(\bnon) ([A-Z]?[a-z]+)", "$1-$2");
//improper capitalisation within section headings
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*External )(Links)(?=[ ]*=)", "$1links");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*See )(Also)(?=[ ]*=)", "$1also");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*)Notable ([A-Z]\w*?)", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*Box )O(ffice)(?=[ ]*=)", "$1o$2");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*[\w]+? and )A(wards?|chievements?)(?=[ ]*=)", "$1a$2");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*[\w\s]+? )A(lbums?)(?=[ ]*=)", "$1a$2");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*[\w\s]+? )C(areer|hampionships|haracters|ompositions)(?=[ ]*=)", "$1c$2");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*[\w\s]+? )E(ducation)(?=[ ]*=)", "$1e$2");
// ArticleText=Regex.Replace(ArticleText, @"(==[ ]*[\w\s]+? )G(roup)(?=[ ]*=)", "$1g$2");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*[\w\s]+? )H(istory|onou?rs)(?=[ ]*=)", "$1h$2");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*[\w\s]+? )L(evel|ife|isting)(?=[ ]*=)", "$1l$2");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*(?:1st|2nd|3rd|\dth) )M(atch)", "$1m$2");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*(?:1st|2nd|3rd|\dth) )F(inal)", "$1f$2");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*(?:First|Second|Third|Fourth|[1-4](?:st|nd|rd|th)) )P(lace)(?=[ ]*==)", "$1p$2");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*(?:First|Second|Third|Fourth|[1-4](?:st|nd|rd|th)) )Q(uarter)(?=[ ]*==)", "$1q$2");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*(?:First|Second|Third|Fourth|[1-4](?:st|nd|rd|th)) )R(ound)(?=[ ]*==)", "$1r$2");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*(?:CFL|N[BFH]L) )C(oaching )[Rr](ecords?)(?=[ ]*=)", "$1c$2r$3");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*[\w\s]+? )R(ankings?|eading|esults?|ecords?|eception|ecognition)(?=[ ]*=)", "$1r$2");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*[-\w\s]+? )C(areer )S(tatistics)(?=[ ]*=)", "$1c$2s$3");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*[\w\s]+? )S(eason|quad|tyle|tage|tatistics)(?=[ ]*=)", "$1s$2");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*[\w\s]+? )P(ersonnel)(?=[ ]*=)", "$1p$2");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*[\w\s]+? )R(esponses?)(?=[ ]*=)", "$1p$2");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*[\w\s]+? )T(ournaments?)(?=[ ]*=)", "$1t$2");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*[\w\s]+? )Y(ears)(?=[ ]*=)", "$1y$2");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*Exhibition )S(chedule)(?=[ ]*=)", "$1s$2");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*Regular )Season Schedule(?=[ ]*=)", "$1season schedule");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*Right )[Oo]f Reply(?=[ ]*=)", "$1of reply");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*Terminated )D(estinations)(?=[ ]*=)", "$1d$2");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*Twin )T(owns)(?=[ ]*=)", "$1t$2");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*Twin )(Towns [Aa]nd [Ss]ister [Cc]ities)(?=[ ]*=)", "$1towns and sister cities");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*Heraldic )(Items)(?=[ ]*=)", "$1items");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*Campaign )C(redits)(?=[ ]*=)", "$1c$2");
ArticleText=Regex.Replace(ArticleText, @"(==[ ]*Combat )C(hronicle)(?=[ ]*=)", "$1c$2");
//other improper capitalisation
ArticleText=Regex.Replace(ArticleText, @"([ ]*(?:\d\d?\W |)(?:CD |Cassette ))S(ingles?)\b", "$1s$2");
ArticleText=Regex.Replace(ArticleText, @"([ ]*(?:\d\d?\W |CD |Cassette ))S(ingles?)\b", "$1s$2");
// ArticleText=Regex.Replace(ArticleText, @"(\d(?:st|nd|rd|th) )C(entur(?:ies|y))(?=[ ]*(=|BC|AD|CE))", "$1c$2"); //transferring to MOSNUM script
// ArticleText=Regex.Replace(ArticleText, @"(\d(?:st|nd|rd|th) )C(entur(?:ies|y))(?![ -]*(?:Fox|[A-Z]\w*))", "$1c$2");
ArticleText=Regex.Replace(ArticleText, @"\b(Bowling |Batting )S(tyle)\b", "$1s$2");
ArticleText=Regex.Replace(ArticleText, @"\b(lef|righ)t-Handed Opening B(atsman)\b", "$1t-handed opening b$2");
ArticleText=Regex.Replace(ArticleText, @"\b(lef|righ)t-Handed Top Order B(atsman)\b", "$1t-handed top-order b$2");
ArticleText=Regex.Replace(ArticleText, @"\b([Aa]ll)[- ]R(ounder)\b", "$1-r$2");
ArticleText=Regex.Replace(ArticleText, @"\b(Wicket)[- ]K(eeper)\b", "$1-k$2");
ArticleText=Regex.Replace(ArticleText, @"\b(fast)[-– ](medium )B(owler)\b", "$1–$2b$3");
ArticleText=Regex.Replace(ArticleText, @"\b([Ff]ast |[Mm]edium )B(owler)\b", "$1b$2");
ArticleText=Regex.Replace(ArticleText, @"\b([Ff]ast|[Ss]low)[-– ](lef|righ)t-[Aa]rm B(owler)\b", "$1 $2-arm b$3");
ArticleText=Regex.Replace(ArticleText, @"\b(fast)[- ]B(owler)\b", "$1-b$2");
ArticleText=Regex.Replace(ArticleText, @"\b([Ll]eg|[Oo]ff)[- ][Ss](pin )B(owler)\b", "$1-s$2b$3");
ArticleText=Regex.Replace(ArticleText, @"\b(st|nd|rd|th) G(rade)\b", "$1 g$2");
// ArticleText=Regex.Replace(ArticleText, @"(Official )S(ite)", "$1s$2");
// ArticleText=Regex.Replace(ArticleText, @"([A-Z][a-z]+ )O(fficial )W(ebsite\])", "$1o$2w$3");
ArticleText=Regex.Replace(ArticleText, @"(\'Further )R(eading)(?=\')", "$1r$2");
ArticleText=Regex.Replace(ArticleText, @"(\w )A(nd|t) A(n? \w)", "$1a$2 a$3");
ArticleText=Regex.Replace(ArticleText, @"(\w )A(nd|t) (My \w)", "$1a$2 $3");
ArticleText=Regex.Replace(ArticleText, @"(\w )A(nd|t) T(he \w)", "$1a$2 t$3");
ArticleText=Regex.Replace(ArticleText, @"(\w )By A(n? \w)", "$1by a$2");
ArticleText=Regex.Replace(ArticleText, @"(\w )By (My \w)", "$1by $2");
ArticleText=Regex.Replace(ArticleText, @"(\w )By T(he \w)", "$1by t$2");
ArticleText=Regex.Replace(ArticleText, @"(\w )For A(n? \w)", "$1for a$2");
ArticleText=Regex.Replace(ArticleText, @"(\w )For (My \w)", "$1for $2");
ArticleText=Regex.Replace(ArticleText, @"(\w )For T(he \w)", "$1for t$2");
ArticleText=Regex.Replace(ArticleText, @"(\w )In A(n? \w)", "$1in a$2");
ArticleText=Regex.Replace(ArticleText, @"(\w )In (My \w)", "$1in $2");
ArticleText=Regex.Replace(ArticleText, @"(\w )In T((?:he|o) \w)", "$1in t$2");
ArticleText=Regex.Replace(ArticleText, @"(\w )I(nto \w)", "$1i$2");
ArticleText=Regex.Replace(ArticleText, @"(\w )O(f|n|r) A(n? \w)", "$1o$2 a$3");
ArticleText=Regex.Replace(ArticleText, @"(\w )O(f|n|r) (My \w)", "$1o$2 $3");
ArticleText=Regex.Replace(ArticleText, @"(\w )O(f|n|r) T(he \w)", "$1o$2 t$3");
ArticleText=Regex.Replace(ArticleText, @"(\w )To A(n? \w)", "$1to a$2");
ArticleText=Regex.Replace(ArticleText, @"(\w )To (My \w)", "$1to $2");
ArticleText=Regex.Replace(ArticleText, @"(\w )To T(he \w)", "$1to t$2");
ArticleText=Regex.Replace(ArticleText, @"(\w )With A(n? \w)", "$1with a$2");
ArticleText=Regex.Replace(ArticleText, @"(\w )With M(y \w)", "$1with M$2");
ArticleText=Regex.Replace(ArticleText, @"(\w )With T(he \w)", "$1with t$2");
ArticleText=Regex.Replace(ArticleText, @"(\w )A(t \w)", "$1a$2");
ArticleText=Regex.Replace(ArticleText, @"(\w )I(n \w)", "$1i$2");
ArticleText=Regex.Replace(ArticleText, @"(\w )O([fn] \w)", "$1o$2"); //'Or' - false positive (with heraldric Or); 'On' - name (e.g. Ma On Shan)
ArticleText=Regex.Replace(ArticleText, @"([Rr]unners?)[\- ]U(p\b)", "$1-u$2");
ArticleText=Regex.Replace(ArticleText, @"([Rr]unner)[\- ][Uu](?:ps)\b", "$1s-up");
ArticleText=Regex.Replace(ArticleText, @"([Pp]lay)[\- ][Oo](ffs?)", "$1-o$2");
ArticleText=Regex.Replace(ArticleText, @"(\W[^A-Z]+ )[Qq](uarter)[\- ]F(inal)", "$1q$2-f$3");
ArticleText=Regex.Replace(ArticleText, @"([Qq]uarter)[\- ]F(inal)", "$1-f$2");
ArticleText=Regex.Replace(ArticleText, @"(\W[^A-Z]+ )[Ss](emi)[\- ]F(inal)", "$1s$2-f$3");
ArticleText=Regex.Replace(ArticleText, @"([Ss]emi)[\- ]F(inal)", "$1-f$2");
ArticleText=Regex.Replace(ArticleText, @"(Bring |Turn )[Ii]t o(n)", "$1It O$2"); //reverting proper name - title of song or work
ArticleText=Regex.Replace(ArticleText, @"(Carry )o(n [A-Z]\w*|n film)", "$1O$2"); //reverting proper name - 'Carry On' film series
ArticleText=Regex.Replace(ArticleText, @"(Ma )o(n Shan)", "$1O$2"); //reverting proper name - 'Ma On Shan'
ArticleText=Regex.Replace(ArticleText, @"(NZ |New Zealand )o(n Air|n Screen)", "$1O$2"); //reverting proper name - 'NZ On Air'
ArticleText=Regex.Replace(ArticleText, @"in t(he [Aa]ir [Tt]onight)", "In t$1"); //reverting per "In the Air Tonight"
ArticleText=Regex.Replace(ArticleText, @"in t(he Flesh [Tt]our)", "In t$1"); //reverting per "In the Flesh tour"
ArticleText=Regex.Replace(ArticleText, @"(\W)o(n This Day)", "$1O$2"); //reverting per "on This Day"
ArticleText=Regex.Replace(ArticleText, @"(Star Trek )into( Darkness)", "$1Into$2"); //reverting proper name - title of work
//remove flagicons from country, birth and death etc
ArticleText=Regex.Replace(ArticleText, @"(?i)((?:birth|death|place|chairman|coach|manager|nationality)\s*=)\s*\{\{flag ?icon\|[^{}]+\}\}", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)(<br ?\/?>)\s*\{\{flag ?icon\|[^{}|]+\}\}", "$1");
//remove scroll bar for reflists
ArticleText=Regex.Replace(ArticleText, @"(?i)(References ?={1,4}[\n\r][\r\n\s]*)<div class=[^>]*>([\S\s]*?)<\/div>", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)((?:Notes ?|References ?)={2,4}\s?[\n\r][\r\n\s]*)(?:\{\{[Rr]eflist\|[2,3]\}\})", "$1{{reflist|colwidth=30em}}");
//rem redundant spaces underlining and punctuation
ArticleText=Regex.Replace(ArticleText, @"(?i)(\W)[“](\[?\w+)", "$1\"$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\w+\]?)(,|\.|)[”](\W)", "$1\"$2$3"); //quotemark plus incidental LQ
ArticleText=Regex.Replace(ArticleText, @"(?i)(\W)[‘`´’′](\[?\w+)", "$1\'$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\w+\]?\.?)[‘`´’′](\W)", "$1\'$2"); // replace various single quotes and prime symbol with straight apostrophe
ArticleText=Regex.Replace(ArticleText, @"(?i)([\w;,\]\)>] ) +([\[\w(])", "$1$2"); //rem multiple spaces except when preceded by full stop
ArticleText=Regex.Replace(ArticleText, @"(?i)(^\.U\.)[ ]+((?:S|K)\.)", "$1$2"); //U. S. and U. K. to U.S. and U.K.
ArticleText=Regex.Replace(ArticleText, @"(?i)(<\/?ref(?: name=[^\<\>\/]*?|)>)[ ,\. ]*(<ref)", "$1$2"); // remove punctuation between ref tags
ArticleText=Regex.Replace(ArticleText, @"(?i)[ ]{1,3}(<\/?ref(?:>| >| n))", "$1"); // remove spaces preceding ref tags and templates
// ArticleText=Regex.Replace(ArticleText, @"(?i)[ ]+(\n|\r)", "$1"); //removes multiple spaces preceding line break [disabled on 2 Dec 2013 as pointless]
ArticleText=Regex.Replace(ArticleText, @"(?i)(\d), ([12]\d{3}\b)+", "$1, $2"); //removes nbsp preceding year
ArticleText=Regex.Replace(ArticleText, @"(?i)(\d)(?: | )%", "$1%"); //removes nbsp preceding '%'
ArticleText=Regex.Replace(ArticleText, @"(?i)( )[ ](–|–)", "$1$2"); //Palliative for dashes script insertion of space after nbsp
ArticleText=Regex.Replace(ArticleText, @"\b(US|UK|A(?:US|)|C(?:AN|)|NZ|HK) ([$£¥€])(\d)", "$1$2$3");
ArticleText=Regex.Replace(ArticleText, @"\{\{AUD\}\} ?(\d+)", "A$ $1");
ArticleText=Regex.Replace(ArticleText, @"([$£¥€]) (\d)", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(\{\{(?:INR|Indian Rupee)\}\}|Rs\.?)(\d+)", "$1 $2");
//rem bolding from linked AND bolded terms
// ArticleText=Regex.Replace(ArticleText, @"'''(\[\[)([^\|\]]+?\||)([^\]]+?\]\][:-–]?)'''", "$1$2$3");
//rem 'external' wiktionary links
ArticleText=Regex.Replace(ArticleText, @"(?i)\[https?:\/\/en\.wiktionary\.org\/wiki\/[\w]*[ ](\w[^\]]*)\]", "$1");
//rem linked copyright symbol
ArticleText=Regex.Replace(ArticleText, @"(?i)(\[\[copyright\|©\]\] |©)", "");
//rem leading and lagging spaces within wikilinks
ArticleText=Regex.Replace(ArticleText, @"(?i)(\[\[)[ ]+([^\[\]\|]*?)[ ]*(\]\])", "$1$2$3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\[\[)[ ]*([^\[\]\|]*?)[ ]+(\]\])", "$1$2$3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\[\[[^\[\]\|]*?[ ])[ ]+([^\[\]]*?\]\])", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\[\[[^\[\]\|]*?)[ ]+\|[ ]*([^\[\]]+\]\])", "$1|$2");
// ArticleText=Regex.Replace(ArticleText, @"(?i)(\[\[[^\[\]\|]*?)[ ]*\|[ ]+([^\[\]]+\]\])", "$1|$2"); //can't remember why we need the second (repeated) line
//symbol for 'times' and dashes
// ArticleText=Regex.Replace(ArticleText, @"(?i)×", "×");
// ArticleText=Regex.Replace(ArticleText, @"(?i)([ \.][\d]+)x([\d]+(?:\.[\d]+|)\s)", "$1 × $2"); //disabling - never ending false positives
ArticleText=Regex.Replace(ArticleText, @"(?i)(\d) x (\d )", "$1 × $2");
ArticleText=Regex.Replace(ArticleText, @"\s(A[cglmrstu]|B[ahikrad]?|C[adeflmno]|D[bsyrsu]|E[rsu]|F[elmr]?|G[adef]|H[fgos]|I[nr]?|Kr?|L[aruv]|M[dgnot]|N[abdeiop]?|Os?|P[abdmortu]?|R[abefghnu]|S[bcegimnr]?|T[abcehilm]?|U[ub][neopst]|V|W|Xe|Yb?|Z[nr])-(Br|Cl?|F|H|I|N|O|P|Se?)\s", " $1–$2 "); //signifying chemical bonds abbrev
// ArticleText=Regex.Replace(ArticleText, @"(?i)([^<][^!] *)--( *[^>])", "$1–$2"); //disabling - causes false positives with urls and some images
ArticleText=Regex.Replace(ArticleText, @"(?i)—", "—");
ArticleText=Regex.Replace(ArticleText, @"(?i)([\w\d]) — (?=[\w\d])", "$1 – "); // tweak to avoid replacing emdashes in strings that are in non-roman unicode characters
ArticleText=Regex.Replace(ArticleText, @"(?i)(\D7\d7)–(\d(?:00|)\D)", "$1-$2"); //airplane model numbers taking hyphen
//inserting a white space between wikilinks to avoid errors upon unlinking
ArticleText=Regex.Replace(ArticleText, @"(?i)(\]\][\.,]?)(\[\[)(?!file|image)", "$1 $2");
//hash fixes
ArticleText=Regex.Replace(ArticleText, @"(?i)([^=] )#(\d{1,3}[,\.]?\s)", "$1No. $2");
//full stop and nbsp fixes
//degrees
ArticleText=Regex.Replace(ArticleText, @"(Ph)(?:\.\s?|\s)(D)\.?", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(B|M)(?:\.\s?|\s)(Arch|Comm|Ed|Eng|Sc|Tech)\.?(?=\W)", "$1$2");
//times of day, time ranges
// ArticleText=Regex.Replace(ArticleText, @"(?i)((?:\d?\d[:\.]\d?\d| \d?\d) [ap])(?:\.m\.)(?=[^\w\-])", "$1m");
// ArticleText=Regex.Replace(ArticleText, @"(?i)(\d?\d[:\.]\d?\d| \d?\d)(?:[ ]*| )(?:a\.m\.|am)(?:[ ]*| )[-–—](?:[ ]*| )(\d?\d[:\.]\d?\d|\d?\d)(?:[ ]*| )(?:p\.m\.|pm)(?=[^\w\-])", "$1 am – $2 pm");
// ArticleText=Regex.Replace(ArticleText, @"(?i)(\d?\d[:\.]\d?\d| \d?\d)(?:[ ]*| )(?:p\.m\.|pm)(?:[ ]*| )[-–—](?:[ ]*| )(\d?\d[:\.]\d?\d|\d?\d)(?:[ ]*| )(?:a\.m\.|am)(?=[^\w\-])", "$1 pm – $2 am");
// ArticleText=Regex.Replace(ArticleText, @"(?i)(\d?\d[:\.]\d?\d| \d?\d)(?:[ ]*| )(?:a\.m\.|am)(?:[ ]*| )[-–—](?:[ ]*| )(\d?\d[:\.]\d?\d|\d?\d)(?:[ ]*| )(?:a\.m\.|am)(?=[^\w\-])", "$1 am – $2 am");
// ArticleText=Regex.Replace(ArticleText, @"(?i)(\d?\d[:\.]\d?\d| \d?\d)(?:[ ]*| )(?:p\.m\.|pm)(?:[ ]*| )[-–—](?:[ ]*| )(\d?\d[:\.]\d?\d|\d?\d)(?:[ ]*| )(?:p\.m\.|pm)(?=[^\w\-])", "$1 pm – $2 pm");
// ArticleText=Regex.Replace(ArticleText, @"(?i)(\d?\d[:\.]\d?\d| \d?\d)(?:[ ]*| )(?:a\.m\.|am)(?:[ ]*| )[-–—](?:[ ]*| )(noon|midnight)(?=[^\w\-])", "$1 am – $2");
// ArticleText=Regex.Replace(ArticleText, @"(?i)(\d?\d[:\.]\d?\d| \d?\d)(?:[ ]*| )(?:p\.m\.|pm)(?:[ ]*| )[-–—](?:[ ]*| )(noon|midnight)(?=[^\w\-])", "$1 pm – $2");
// ArticleText=Regex.Replace(ArticleText, @"(?i)\b(\d?\d[:\.]\d?\d| \d?\d)(?:[ ]*| )(?:a\.m\.|am)(?=[^\w\-])", "$1 am");
// ArticleText=Regex.Replace(ArticleText, @"(?i)\b(\d?\d[:\.]\d?\d| \d?\d)(?:[ ]*| )(?:p\.m\.|pm)(?=[^\w\-])", "$1 pm");
ArticleText=Regex.Replace(ArticleText, @"(\d\.\d?\d| \d{1,3}| \d{1,3},\d{3})[ ]*(?:kw)\b", "$1 kW");
ArticleText=Regex.Replace(ArticleText, @"(\d\.\d?\d| \d{1,3}| \d{1,3},\d{3})[ ]*(?:khz)\b", "$1 kHz");
ArticleText=Regex.Replace(ArticleText, @"(\d\.\d?\d| \d{1,3}| \d{1,3},\d{3})[ ]*(?:m[Hh]z)\b", "$1 MHz");
ArticleText=Regex.Replace(ArticleText, @"(\d\.\d?\d| \d{1,3}| \d{1,3},\d{3})[ ]*(?:g[Hh]z)\b", "$1 GHz");
ArticleText=Regex.Replace(ArticleText, @"(\d\.\d?\d| \d{1,3}| \d{1,3},\d{3})[ ]*(?:kph|kphr|kmh|kmhr|kmph|kmphr|km\/hr)\b", "$1 km/h");
ArticleText=Regex.Replace(ArticleText, @"(\d\.\d?\d| \d{1,3}| \d{1,3},\d{3})[ ]*(?:m\.p\.h\.)\b", "$1 mph");
ArticleText=Regex.Replace(ArticleText, @"(\d\.\d?\d| \d{1,3}| \d{1,3},\d{3})[ ]*(gm|kg|km)s?\b", "$1 $2");
ArticleText=Regex.Replace(ArticleText, @"(\d\.\d?\d| \d{1,3}| \d{1,3},\d{3})[ ]*KMs?\b", "$1 km");
ArticleText=Regex.Replace(ArticleText, @"(\d\.\d?\d| \d{1,3}| \d{1,3},\d{3})[ ]*KGs?\b", "$1 kg");
ArticleText=Regex.Replace(ArticleText, @"(\d\.\d?\d| \d{1,3}| \d{1,3},\d{3})[ ]*(?:K(g|m))s?\b", "$1 k$2");
ArticleText=Regex.Replace(ArticleText, @"(\d\.\d?\d| \d{1,3}| \d{1,3},\d{3})[ ]*cms?", "$1 cm");
// ArticleText=Regex.Replace(ArticleText, @"([^\|\[=]\d{1,3})\s(m|b|tr)illion(\b[^}])", "$1 $2illion$3");
//turn letter 'x' into symbol '×'
ArticleText=Regex.Replace(ArticleText, @"(?i)(\d)\sx\s(\d{1,3})\sin\s\(", "$1 × $2 in (");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\d)\sx\s(\d{1,3})\sinch\s", "$1 × $2 inch ");
// Convert degree symbols into ° symbol, ensure preceding space
ArticleText=Regex.Replace(ArticleText, @"°", "°");
// ArticleText=Regex.Replace(ArticleText, @"º", "°");
// Celsius spelling errors
ArticleText=Regex.Replace(ArticleText, @"(?i)(?:celsius|celcius|centigrade)", "Celsius");
//Fix common naming error (be careful with this one)
// ArticleText=Regex.Replace(ArticleText, @"(?i)centigrade", "Celsius");
//Celsius or Fahrenheit
ArticleText=Regex.Replace(ArticleText, @"(\d) (?:[°º]|deg|degree|degrees) ([CF]\W)", "$1 °$2");
ArticleText=Regex.Replace(ArticleText, @"(\d)(?:[°º]|deg|degree|degrees) ([CF]\W)", "$1 °$2");
ArticleText=Regex.Replace(ArticleText, @"(\d) (?:[°º]|deg|degree|degrees)([CF]\W)", "$1 °$2");
ArticleText=Regex.Replace(ArticleText, @"(\d)(?:\s|)(?:[°º]|deg|degree|degrees)(?:\s|)([CF]\W)", "$1 °$2");
ArticleText=Regex.Replace(ArticleText, @"(\d)(?:\s| )?(?=\[\[Celsius\|[°º]C\]\])", "$1 $2");
ArticleText=Regex.Replace(ArticleText, @"(\d)(?:\s| )?(?=\[\[Fahrenheit\|[°º]F\]\])", "$1 $2");
ArticleText=Regex.Replace(ArticleText, @"([^\d\(\)\/\\]\s)(-?\d[\d,\.]*)(?:\s|-| |)[°º]F([:;,\.?!]?\s[^\d\(\)\/\\])", "$1{{convert|$2|°F|°C|abbr=on}}$3");
ArticleText=Regex.Replace(ArticleText, @"([^\d\(\)\/\\]\s)(-?\d[\d,\.]*)(?:\s|-| |)(?:deg|degree|degrees)(?:\s|-| |)Fahrenheit([:;,\.?!]?\s[^\d\(\)\/\\])", "$1{{convert|$2|°F|°C}}$3");
// Convert &sup to superscript
// ArticleText=Regex.Replace(ArticleText, @"(?i)(m)(?:²|²);", "$1<sup>2</sup>");
// ArticleText=Regex.Replace(ArticleText, @"(?i)(m)(?:³|³);", "$1<sup>3</sup>");
//remove commas from numerical values in convert template
ArticleText=Regex.Replace(ArticleText, @"(?i)(\{convert\|\d+),(\d)", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\{convert\|\d+),(\d)", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\{convert\|\d+),(\d)", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\{convert\|\d+),(\d)", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\{convert\|\d+),(\d)", "$1$2");
//remove leading zeros from convert template
ArticleText=Regex.Replace(ArticleText, @"(?i)(\{\{convert\s*\|)\s*0+(?=[1-9])", "$1$2");
///per WP:COMMONALITY
ArticleText=Regex.Replace(ArticleText, @"(?i)([Ff])reshman (year)", "$1irst $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)([Ss])ophomore (album|year)", "$1econd $2");
//Currency notation placements [$£₤¥€]
ArticleText=Regex.Replace(ArticleText, @"(?i)\s(\$(?:\d+\.\d\d?|\d{1,3}|\d{1,3},\d{3}))((?:\s| )(?:m|b|tr)illion|)[ ]*(?:US(?:[D$]|\s?dollars?))\b", " US$1$2");
//Remove surprise or 'Easter egg' diversions linking unit name to orders of magnitude articles
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[1\s?_?E\s?[\-\+]?\d{1,2}\s?..?\|([^\]]{1,50})\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Orders\sof\smagnitude\s\([^\)]+\)\|([^\]]{1,50})\]\]", "$1");
//remove useless comments
ArticleText=Regex.Replace(ArticleText, @"<!-- Metadata: see \[\[Wikipedia:Persondata\]\]\. -->", "");
ArticleText=Regex.Replace(ArticleText, @"<!-- Deleted image removed:[^>]*? -->\n*", "");
ArticleText=Regex.Replace(ArticleText, @"<!--DASHBot-->(?=\|)", "");
///dashes
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|(?:1[89]|20)\d{2})-(\d{2}\]\])", "$1–$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\[\[1[89]\d{2})-(\d{2}\D)", "$1–$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\[\[20[01]\d)-([012]\d\D)", "$1–$2");
///LINK RATIONALISATION
// Country and language; city
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(area|cit(?:y center|y centre|ies|y)|countr(?:y|ies)|count(?:y|ies)|district|parish|province|region|rural|suburb|town(?:ship|)|urban(?: area|)|village)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:rural|(?:sub)?urban)(?: area|i[sz]ation|)\||)((?:rural|(?:sub?)urban)(i[sz]ed?|i[sz]ation|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:List of (?:countries|U.S. states|sovereign states)|Countries of the world)\|(country|countries|states?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[((?:US|U\.S\.) states?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:US|U\.S\.) states?\|(states?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[States and territories of India\|(state)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[city\|(cities)\]\]", "$1");
//Chained countries
ArticleText=Regex.Replace(ArticleText, @"(?i)(\]\], )\[\[(Abkhazia|Afghanistan|Albania|Algeria|Andorra|Angola|Antigua and Barbuda|Argentina|Armenia|Australia|Austria|Azerbaijan|(?:The |)Bahamas|Bahrain|Bangladesh|Barbados|Belarus|Belgium|Belize|Benin|Bhutan|Bolivia|Bosnia|Herzegovina|Botswana|Brazil|Brunei|Bulgaria|Burkina Faso|Burma|Burundi|Cambodia|Cameroon|Canada|Cape Verde|Central African Republic|Chad|Chile|(?:(?:People's |)Republic of |)China|Colombia|Comoros|(?:Democratic |)Republic of (?:the |)Congo|Costa Rica|Côte d'Ivoire|Croatia|Cuba|Cyprus|Czech Republic|(?:Kingdom of |)Denmark|Djibouti|Dominica|Dominican Republic|East Timor|Ecuador|Egypt|El Salvador|Equatorial Guinea|Eritrea|Estonia|Ethiopia|Fiji|Finland|France|Gabon|(?:East |West |)Germany|Ghana|Greece|Greenland|Grenada|Guatemala|Guinea|Guinea-Bissau|Guyana|Haiti|Honduras|Hungary|Iceland|India|Indonesia|Iran|Iraq|(?:Republic of |)Ireland|Israel|Italy|Jamaica|Japan|Jordan|Kazakhstan|Kenya|Kiribati|North Korea|South Korea|Kosovo|Kuwait|Kyrgyzstan|Laos|Latvia|Lebanon|Lesotho|Liberia|Libya|Liechtenstein|Lithuania|Luxembourg|(?:Republic of |)Macedonia|Madagascar|Malawi|Malaysia|Maldives|Mali|Malta|Marshall Islands|Mauritania|Mauritius|M[ée]xico|(?:Federated States of |)Micronesia|Moldova|Monaco|Mongolia|Montenegro|Morocco|Mozambique|Nagorno-Karabakh|Namibia|Nauru|Nepal|(?:(?:Kingdom of |)the |)Netherlands|Holland|New Zealand|Nicaragua|Niger|Nigeria|Northern Cyprus|Norway|Oman|Pakistan|Palau|Palestine|Panama|Papua New Guinea|Paraguay|Peru|Philippines|Poland|Portugal|Qatar|Romania|Russia|Rwanda|SADR|Saint Kitts and Nevis|Saint Lucia|Saint Vincent and the Grenadines|Samoa|San Marino|São Tomé and Príncipe|Saudi Arabia|Senegal|Serbia|Seychelles|Sierra Leone|Singapore|Slovakia|Slovenia|Solomon Islands|Somalia|Somaliland|South Africa|South Ossetia|Spain|Sri Lanka|Sudan|Suriname|Swaziland|Sweden|Switzerland|Syria|Taiwan|Tajikistan|Tanzania|Thailand|(?:The |)Gambia|Togo|Tonga|Transnistria|Trinidad and Tobago|Tunisia|Turkey|Turkmenistan|Tuvalu|Uganda|Ukraine|United Arab Emirates|United Kingdom|England|Scotland|Wales|Northern Ireland|United States|Uruguay|Uzbekistan|Vanuatu|Vatican City|Venezuela|Vietnam|Yemen|Zambia|Zimbabwe)\]\](?=[\.\)]|[ ]*[\n\r])", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:People's Republic of |)China|England|France|Germany|Great\sBritain|Japan|South African|Spain|United\sKingdom|U\.K\.|UK|United\sStates(?:\sof\sAmerica|)|US|U\.S\.|USA|U\.S\.A\.)\|(British|Chinese|English|French|German|Japanese|Spanish|American|US)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:United\sStates(?:\sof\sAmerica|)\||)(USA?|U\.S\.(?:A\.|))\]\]", "US");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:United\sStates(?:\sof\sAmerica|)\||)(USA?|U\.S\.(?:A\.|)|United\sStates(?:\sof\sAmerica|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\]\], )\[\[Georgia \(country\)\|(Georgia)\]\](?=[\.\)]|[ ]*[\n\r])", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\]\], )\[\[Republic of Ireland\|(Ireland)\]\](?=[\.\)]|[ ]*[\n\r])", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[People's Republic of China\|(China)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:United\sKingdom(?:\sof\sGreat Britain and Northern Ireland|)\||)(U\.K\.|UK|United\sKingdom)\]\]", "UK");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\]\], )\[\[(England|Wales|Scotland|Northern Ireland)\]\],? (\[\[United Kingdom(?:\|UK|)\]\]|United Kingdom|UK)(?=\.|[ ]*[\n\r])", "$1$2");
//Nationalities egged to country
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(Abkhazia|Albania|Algeria|Andorra|Angola|Antigua and Barbuda|Armenia|Australia|Austria|Azerbaijan|Bahrain|Bangladesh|Belarus|Belize|Benin|Bhutan|Bolivia|Bosnia and Herzegovina|Botswana|Brazil|Brunei|Bulgaria|Burma|Burundi|Cambodia|Cameroon|Canada|Cape Verde|Chad|Chile|Colombia|Comoros|Congo|Costa Rica|Côte d'Ivoire|Croatia|Cuba|Cyprus|Djibouti|Dominica|Dominican Republic|East Timor|Ecuador|Egypt|El Salvador|Equatorial Guinea|Eritrea|Estonia|Ethiopia|Fiji|Gabon|Ghana|Greenland|Grenada|Guatemala|Guinea|Guinea-Bissau|Guyana|Haiti|Iceland|India|Indonesia|Iran|Iraq|Israel|Jamaica|Japan|Jordan|Kenya|Kiribati|North Korea|South Korea|Kosovo|Kuwait|Latvia|Lesotho|Liberia|Libya|Liechtenstein|Lithuania|Luxembourg|(?:Republic of |)Macedonia|Malawi|Malaysia|Maldives|Mali|Marshall Islands|Mauritania|(?:Federated States of |)Micronesia|Moldova|Mongolia|Nagorno-Karabakh|Namibia|Nauru|Nepal|New Zealand|Nicaragua|Niger|Nigeria|Northern Cyprus|Oman|Pakistan|Palau|Palestine?|Panama|Papua New Guinea|Paraguay|Peruv|Philippines?|Qatar|Romania|Russia|Rwanda|Sahrawi|Kittitian|Saint Lucia|Vincent|Samoa|San Marino?|São Tomé and Príncipe|Saudi Arabia|Senegal|Serbia|Seychelles|Sierra Leone|Singapore|Slovenia|Solomon Islands|Somalia|Somaliland|South Africa|South Ossetia|Spai?n|Sri Lanka|Sudan|Suriname|Swaziland|Swed|Syria|Taiwan|Tanzania|(?:The |)Gambia|Togo|Tonga|Transnistria|Trinidad|Tobag|Tunisia|Turk|Tuvalu|Uganda|Ukrain|United Arab Emirates|United States|Uruguay|Vanuatu|Vatican City|Venezuela|Vietnam|Yemen|Zambia|Zimbabwe)\]\](?=ese|(?:i?a|)n|ic?|ish)\b", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Belgium\|(Belgian)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:Burma|Myamnar)\|(Burmese)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Canada\|(Canadian)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:People's |)Republic of |)China\|(Chinese)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:Czech|Slovak) Republic\|(Czech|Slovak(?:ian|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Cyprus\|(Cypriot)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:Kingdom of |)Denmark\|(Danish)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[France\|(French)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Finland\|(Finnish)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Greece\|(Greek)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:East |West |)Germany\|((?:East |West |)German)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:(?:Kingdom of |)the |)Netherlands|Holland)\|(Dutch)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Honduras\|(Honduran)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Hungary\|(Hungarian)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:Republic of |)Ireland\|(Irish)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Italy\|(Italian)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Laos\|(Laotian)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Lebanon\|(Lebanese)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Republic of Macedonia\|(Macedonian)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Madagascar\|(Madagascan)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Malta\|(Maltese)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Monaco\|(Mon[eé]gasque)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Mozambique\|(Mozambican)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(M[ée]xic|Montenegr|Morocc)o\|\1(an)\]\]", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Mauritius\|(Mauritian)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Norway\|(Norwegian)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Poland\|(Polish)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Portugal\|(Portuguese)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Spain\|(Spanish)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Switzerland\|(Swiss)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Thailand\|(Thai)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Turkey\|(Turk(?:ish|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(Afghan|Kazakh|Kyrgyz|Tajik|Turkmeni|Uzbek)i?stan\|\1\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:Great Britain|United Kingdom)\|(British|UK)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[England\|(English)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Scotland\|(Scottish)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Wales\|(Welsh)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Northern Ireland\|(Northern Irish)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:USSR|Soviet Union|Union of Soviet Socialist Republics)\|(Soviet)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[United\sStates(?:\sof\sAmerica|)\|(USA?|U\.S\.(?:A\.|)|American)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:USD|United\sStates(?:\sdollar|$))\|(US[D$]|\$)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[([^\]]{1,26})\,\s(Cambridge|Oxford|London)\|([^\]]{1,26})\]\]\,?\s(Cambridge|Oxford|London)(\sUniversity|)", "[[$1, $2]]");
// [[Salt Lake City, Utah|Salt Lake City]], [[Utah]] -> [[Salt Lake City, Utah|Salt Lake City]], Utah
ArticleText=Regex.Replace(ArticleText, @"(?i)(\[\[([^|\[\]]*), ([^|\]]*)\|\2\]\],[ ])\[\[\3\]\]", "$1$3");
// [[Tacoma, Washington|Tacoma]], [[Washington (U.S. state)|Washington]] -> [[Tacoma, Washington|Tacoma]], Washington
ArticleText=Regex.Replace(ArticleText, @"(?i)(\[\[(?:[^\]]{1,20},\s(?:Georgia|Washington))\|(?:[^\]]{1,20})\]\]),?\s\[\[(?:Georgia|Washington) \(U. ?S.? state\)\|(Georgia|Washington)\]\]", "$1, $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\[\[(?:Brooklyn|Queens|Manhattan|The Bronx))\,\s(New York)\]\]", "$1]], $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(New York( City|)(?:\]\], \[\[|, )(?:New York|NY))\]\]", "New York City");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(New York( City|)(?:, (?:New York|NY)|))\|New York\]\](, New York|, \[\[New York\]\]|)", "New York City");
ArticleText=Regex.Replace(ArticleText, @"(?i)New York(?: City|), (?:New York|U\.S\.|USA?)", "New York City");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(London, England)\]\](?:, UK|, United Kingdom|)", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(London)(?:, UK|, United Kingdom)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(London)\|\1, (?:[^\[\]]*)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:Chinese|Dutch|English|French|German|Irish|Italian|British|Japanese|Scottish|Spanish|American)\s\(?(?:language|people)\)?\|([^\]]*)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(Chinese|Dutch|English|French|German|Irish|Italian|British|Japanese|Scottish|Spanish|American)(\slanguage|)\]\]", "$1$2"); //unpiped
// months
//time and seasons
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(age|epoch|era|times)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Present\s\(time\)\|([^\]]+?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(annual|da[iy]|month|(?:fort|)night|season(?:al|)|hour|minute|present|second|week|year|decade|century)([ -]?end|ly|s|)\]\]", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[((Mon|Tues|Wednes|Thurs|Fri|Satur|Sun)days?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:Mon|Tues|Wednes|Thurs|Fri|Satur|Sun)day)\|(Mon|Tues?|Wed|Thurs?|Fri|Sat|Sun|M|Tu|W|Th|F|Sa|Su)(\.|)\]\]", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(morning|afternoon|midnight|noon|sunrise|sunset|dawn|dusk|twilight)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(spring|summer|winter|autumn|fall)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[spring\s\(season\)\|([^\]]+?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[autumn\|(fall)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:hour|minute|second)s?\||)(hr|min|sec|m|s)\]\]", "$1");
// months
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(Jan(?:uary|\.)|Feb(?:ruary|\.)|Mar(?:ch|\.)|Apr(?:il|\.)|May|Jun(?:e|\.)|Jul(?:y|\.)|Aug(?:ust|\.)|Sep(?:tember|\.|t\.?)|Oct(?:ober|\.)|Nov(?:ember|\.)|Dec(?:ember|\.))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:January|February|March|April|May|June|July|August|September|October|November|December)\|([^\]]{1,30})\]\]", "$1");
// simple words and numbers
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(\d{1,3}(,\d{3})*)\]\]", "$1");
// expressions in foreign languages
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(ad (?:hoc|hominem|nauseum)|de facto|et al\.?|fait accompli|faux pas|prima facie|status quo)\]\]", "$1");
// people general, professions
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(apprentice|arranger|art(?:ist|)|athlete|athletics|author|ballet|butcher|camera|career|comedian|composer|consul(?:ate|ar|tant|)|civilian|crew|(?:film |music |)critic|cultur(?:e|al)|dentist|design(?:er|)|dj|(?:dis[ck] |)jockey|drawing|educator|[eé]lite|embassy|engineer(?:ing|)|exhibition|explorer|fishing|group|guest star|hacker|leader|librar(?:ian|ie|y)|lyricist|mayor|mathematic(?:al|ian|s)|music(?:al(?: theatre|theater|)|ian|)|multi-instrumentalist|narrator|panorama|playwright|postage(?: stamp|)|postman|produc(?:e[dr]|tion)|pseudonym|political commentator|pundit|(?:record )company|sailor|sculpt(?:or|ure)|soldier|solicitor|singer.songwriter|song|songwriter|songwriting|toy|tradition|trainee|trumpet(?:er|)|waiter)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:edit(?:or|ing)|journalism)\||)(columnists?|edit(?:ed|ing|ors?)|editors?-in-chief|editorial|reporter|journalis[mt]s?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:auto|)biography\||)((?:auto|)biograph(?:er|y|ical|ies))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:philosophy\||)(philosoph(?:er|y|ical|ies))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:science\||)(scien(?:ce|tific(?:ally)|tists?))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:screenwrit(?:er|ing)\||)((?:screen[ -]?|)writ(?:ers?|ing))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:publi(?:cation|shing)\||)(publi(?:cation|shing|shers?))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:photograph(?:er|y|)\||)(photograph(?:ers?|y|ic|s|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:conducting\||)(conduct(?:ed|ing|ors?))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:piano|pianist)\||)(pianos?|pianists?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:prostitution\||)(prostitut(?:es?|ion))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:politic(?:s|ian)\||)(politic(?:s|al|ians?))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:professional sports\||)(professional|professional sports?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:amateur sports\||)(amateur|amateur sports?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:movie theater\||)(movie theat(?:re|er)s?|cinemas?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:retirement\||)(retir(?:e[drs]?|ement|ing))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"\[\[(?:[Cc]ivil\s[Ss]ervice\||)(?:[Cc]ivil\s[Ss]erv(ants?|ice))\]\]", "civil serv$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(cable |satellite |terrestrial |)(tv|television)\]\]", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(clothing|cloth(?:es|)|cotton|denim|earring|fabric|footwear|garment|glove|hand ?bag|hat|jean|leather|legging|lingerie|silk|necklace|nylon|dress|tailor|(?:neck|)tie|shirt|sock|stocking|jacket|jewel(?:le|)ry|trouser|vest|watch|scarf|shoe|short|sunglasses|suit|wig)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(balm|eye.?liner|lip.?stick|mascara|perfume)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:cosmetics\||)(make.?up|cosmetics)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:coats?|belts?)\(clothing\)\||)(coats?|belts?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:ring \(jewel(?:le|)ry\)\||)((?:diamond |engagement |gold |pinkie |wedding |)rings?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(captain|major|general|lieutenant|private)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:captain|colonel|major|general(?: officer|)|lieutenant|sergeant|private)(?: \([\w]*\)|)\||)(captain|colonel|major|general|lieutenant|sergeant|private)\]\](?= \[)", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[musical theatre\|(music(?:al(?: theatre|theater|)s?))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(beauty (?:competition|contest|pageant|queen))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(answer|question|contest|contestant|game|pageant)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:competition\||)(competit(?:ions?|ive|ors?))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:dance|choreography)\||)(choreograph(?:e[dr]s?|y|)|dance[drs]?|dancing)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:(?:paint|writ)ing|illustration)\||)(paint|writ|illustrat)(ed|[eo]rs?|ing)\]\]", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(bicycle|bike|boat|ferry|engine|motor(?:cycle|ing|)|ship|truck|tyre|van|vehicle|wheel)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(van)\]\]", "$1"); //false positive for 'Vans' clothing brand
// ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(foo bar)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(equipment|instrument|machine|tool)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\W\s+)\[\[(?:Ship naming and launching\|)(launched)\]\]", "$1$2");
//business & legal
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:chair \(official\)|chairman)\||)(chair(?:man|woman|person|))\]\]", "chairman");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(chair(?:m[ae]n|person)|contracts?|director|entrepreneur|intellectual property|judge|patent|(?:vice[- ]|)president|real estate|regulation|taxe?|taxation|trademark|treasurer)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(legisla(?:tion|tive assembl[iy]e?|tive council|ture))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:accountancy\||)(account(?:ant|ing))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:business\||)((?:business|enterprise)(?:e?s|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:business(?:person|people|)\||)(business(?: ?m[ae]n|person|es|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:law|lawyer)\||)(attorney|laws?|lawyers?|(?:il|)legal(?:ly|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:board of directors\||)(board|(?:board of |)directors)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[((?:creative|managing|musical|personnel) director)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:film ?making\||)(film ?mak(?:er|ing))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:management\||)(manag(?:e[drs]?|ement|ing))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[((?:private(?:ly held|) |public |listed |quoted |)(?:compan(?:ies|y)|corporations?))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[((?:private(?:ly held|) |public |listed |quoted )compan(?:ies|y))\|(private|public|listed|quoted)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:chief executive officer\||)(CEO|C\.E\.O\.|chief executive( officer)?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:chief (?:financial|operating) officer\||)(C[FO]O|C\.[FO]\.O\.|chief (financial|operating) officer)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(headquarter|officer?|official)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:bankruptcy\||)(bankrupt(?:cy|cies|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:resignation\||)(resign(?:ed|ing|ations?|s|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:strategy\||)(strateg(?:y|ies|ic|ically))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:trade|trading|commerce)\||)(trade|trading|commerce|commercial)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:customs\||)(customs(?: duty| duties| officer| service| tax|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(customers?)\]\]", "$1");
// buildings structure and environment
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(bath|bathroom|bed|ceiling|chair|fixture|fitting|gym|kitchen|laundry|shower|(?:swimming |)pool|table|toilet|wall)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(architect(?:ure|)|carpet|cathedral|chapel|construction|fa[cç]ade|floor|furniture|garden(?:ing|)|hospital|home|residen(?:ce|t)|hotel|hous(?:e|ing)|infrastructure|landmark|museum|neighbou?rhood|night club|park|roof|shop(?:ping mall|ping arcade|)|stadium|store?y|skyscraper|interior design(?:er|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:shopping (?:arcade|mall|centre|center)\||)((?:shopping |)(?:arcade|centre|center|mall)(?:s|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:church \(building\)\||)(church)(es|)\]\]", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(brick|building|composite|cement|concrete|environment|foundation|glass|steel|structure|wood)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(flat|apartment|room)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:garage \(house\)\||)(garages?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(dam|port|bridge|station|pedestrian|reservoir|road|street|traffic|tunnel|underground|(?:high|free|motor)way)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[((?:high|mid|medium|low)[- ]?rise)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:headquarters\||)(headquarters|headquartered)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:central business district\|)(CBD|central business district|down[ -]?town)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(CBD|central business district|down[-]?town)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[((?:bus|metro|railway|train|tube|underground)(?: stop| station))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:bus|metro|railway|train|tube|underground)(?: stop| station)\|(station)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:environmentalism\||)(environment(?:al(is[mt]|)))\]\]", "$1");
// ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(foobar)\]\]", "$1");
// earth science nouns
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(animal|insect|plant)(s|)\]\](?![ai])", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(cattle|meat|timber|livestock|milk|dairy(?: produce|)|vegetables?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:(?:hu|wo|)man)\||)((?:hu|wo|)m[ae]n)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(bear|bird|bull|cat|chicken|crab|dog|dolphin|cow|fish|fox|frog|sheep|goat|human|pig|horse|mouse|mice|octopus|parrot|penguin|pet|(?:sea ?|)lion|rabbit|reptile|seal|snake|spider|tiger|turtle|elephant|giraffe|whale|worm)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(beach|cave|cliff|earthquake|forest|grass|hill|island|lagoon|land|lake|mountain|ocean|pond|river|sea|stream|tree|vegetation|weed)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(altitude|elevation|sea level|[hw]eight)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(solid|liquid|gase?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(metal|min(?:ing|e|eral)|gold|iron|iron ore|nickel|alumin(?:a|i?um)|copper|diamond|mineral sands|coal|lead|logging|oil|natural gas|silver)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(plastic|rubber)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(mining\||)(mines?)\]\]", "$1$2");
// tech
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(hi(?:gh|)[ -]?tech)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(address|digit|file|(?:sur|fore|first |last |nick|)name|number|sign(?:ature|)|word|letter|sentence)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(blog|broadband|(?:e-?|)mail|computer|data|personal\scomputer|PC|laptop|laptop\scomputer|(?:cell|cellular|mobile|portable|tele|)[- ]?phone|MP[34](?: player|)|digital audio player|technology|(?:computer |)(?:application|hardware|program|software)|(?:computer |video |)game)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(computer|high|information)( technology|)\]\]", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:SMS|text messaging)\||)(SMS|texting|text messag(?:es?|ing))\]\]", "$1");
// economy
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(bank(?:ers?|ing|s|)|capital|cargo|(?:un|)employ(?:e[der]s?|ment)|GDP|gross domestic product|inflation|insurance|invest(?:ed|ing|ments?|ors?)|joint ventures?|loan|money|mortgage|per capita(?: income|)|(?:labou?r |trade |)unions?|utilities)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(credit(?: card|)|pension|welfare)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:finance\||)(financ(?:e|ial|ing|ier))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:wealth\||)(wealthy?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:partnership\||)(partner(?:ed|ing|ship|)s?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[gross domestic product\|(GDP)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:radio |tv |television |)(?:advert(?:isement|)|commercial|special|network)\||)((?:radio |tv |television |)(?:advert(?:isement|)|commercial|special|network|radio|tv|television))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:demonstration \(people\)\||)(demonstrators?|protest(?:er|)s?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:strike action\||)(strike(?: action|s|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:electricity\||)(electric(?:ity|al|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:sales\||)(sales?|salesm[ae]n|sell(?:er|ing|s|)|sold)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(assault|award|club|colou?r|confectionery|cosmetic|down[ -]?town|fire|flower|gambling|gas(?:oline|)|heating|income|information|institut(?:e|ion)|Internet|inventor|job|li[fv]e|magazine|mosque|(?:news|)paper|prize|publicity|organi[sz](?:e|ation)|department|petrol|plastic|(?:air |)pollution|product|salary|school|smog|subsidiary|supermarket|synthesi[sz]er|synagog(?:ue|)|team|television|(?:tv |television |)network|temple|textile|time(?:line|)|wage|water|website|win)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:stage \((?:theater|theatre)\)|theater|theatre)\||)(stages?|theaters?|theatres?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(advertis(?:ing|ement)|brand|creativity|consumer|market(?:ing|)|sign(?:age|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(logo)\]\]", "$1"); //"Logos" is a separate word from logo
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(fruit|apple|banana|garlic|grape|lemon|melon|pear|pumpkin|tomatoe?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(peanut)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(meat|beef|poultry|pork|seafood|butter|candy|cereal|corn|flour|grain|lettuce|wheat|maize|pasta|pastry|pepper|rice|salt|sugar|tobacco|vinegar)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(breakfast|lunch|dinner|supper|food|drink|herb|spice|beverage|biscuit|dessert|tea|chocolate|coffee|juice|carrot|onion|potatoe?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:agriculture|horticulture)\||)((agri|horti)(culture|cultural))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[orange \(fruit\)\|(oranges?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(cook|cooking|recipe|oven)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[((?:tele|)communic(?:ation|ate))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(air(?:craft|line|plane|port|)|ambulance|aviation|bus|logistics|transport(?:ation|)|train|tram|)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(exploration|trad(e|ing)|shipping|outsourcing)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:rail transport\||)(rails?|railways?|rail transport|railroads?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:retail(?:er|ing|)\||)(retail(?:er|ing|)|(?:retail |)shop)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:wholesale(?:r|)\||)(wholesale(?:r|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:econom(?:ics|y)\||)(econom(?:ical|ics?|ists?|y))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:economic growth\||)((?:economic |)growth)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:statistics\||)(statistics?|statisticians?|statistical)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(profit(?:able|ability|s|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[((im|ex)(port(?:er|ing|s|)))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[((immi|emi)(grate[sd]|gration))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:factory\||)(factor(?:y|ies)|manufactur(?:er?|ing(?: plant|)))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(coal min(e[rs]?|ing))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:farming\||)(farm(er|s|ing|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:history\||)(histor(?:ical|ian|ies|y))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(baker|grocer)(ies|y|)\]\]", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(beauty (?:parlour|salon)|confectioner|convenience store|florist|gift(?: shop|)|green ?grocer|hardware store|hair ?dresser|newsagent)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:self.service laundry\||)(laundr(?:ette|omat|y))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:non-?profit\sorgani[sz]ation\||)(non-?profit\sorgani[sz]ations?|non-?profit)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:non-?(?:governmental|profit)\sorgani[sz]ation\||)(non-?(?:governmental|profit)\sorgani[sz]ation|NGO)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:charity \(practice\)|charitable\sorgani[sz]ation)\||)(charitable\sorgani[sz]ations?|charit(?:able|ies|y))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(post office)\]\]", "$1");
// colours
// ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(foo|fooo)(bar)\]\]", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(strawberry |platinum |)(blonde?)\]\]", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:blonde?\||)(blond hair)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(light.|dark.|)(beige|black|brown|blue|crimson|gr[ae]y|green|maroon|orange|pink|purple|red|violet|white|yellow)\]\]", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:royal.|navy.)blue\||)(royal.|navy.)(blue|)\]\]", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:grey\||)(gr[ae]y)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[[^\(\[\]]* \(colou?r\)\|([^\]]*)\]\]", "$1");
//sociology, race & education
ArticleText=Regex.Replace(ArticleText, @"(?i)(?:\[\[(Sri)\.?\]\]|Sri) (?=\[\[)", "");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(Dame|Mrs?|Rev|Lady|Sir|Sri)\.?\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:Malay styles and titles\||)(Dat(?:o'?|uk))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:Doctor \(title\)\||)(Dr.?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:The Honou?rable\||)((?:The |)Hon.)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:Knight Bachelor\||)(Sir)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(academ(?:ic|ies|y)|class(?:room|)|campuse?|colleague|community|degree|education|household|lectur(?:e[rs]?|ing)|person|people|(?:assistant |visiting |)professor|scholar(?:ship|)|teacher?|headmaster|society|sociology|student)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(student(:s'?|) union)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)(?:\[\[)(freshman)(?:\]\]) year", "first year");
ArticleText=Regex.Replace(ArticleText, @"(?i)(?:\[\[)(sophomore)(?:\]\]) year", "second year");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:discrimin|gradu)ation\||)((?:discrimin|gradu)at(e[ds]?|ion|ing))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:philanthropy\||)(philanthrop(?:y|ic|ist))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:theology\||)(theolog(?:y|ians?|ies))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:political |)activis[mt]\||)(activis[mt])\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(educat(?:e[ds]?|ion|ional)|health[ -]?care)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(boy|girl)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(foster[ -]?|god[ -]?|grand[ -]?|step[ -]?|)(family|father|mother|parent|cousin|twin)\]\]", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(father|mother|parent|sister|brother|son|daughter|cousin)(s|)(-in-law)\]\]", "$1$2$3");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:child(?:ren|)\||)(baby|sons?|daughters?|child(?:ren|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:sibling\||)(sister|brother|sibling)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:spouse\||)(husband|wife)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:adolescence\||)(adolescen(?:ce|t)|teen(?:ager|s|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[((?:great[ -]?|)(?:aunt|uncle|niece|nephew)(?:s|))\]\]", "$1");
//ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(Latinos?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[((?:African|Asian|Chinese|Irish|Italian|Latino).Americans?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[((fashion|gay|pop)\sicons?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"\[\[Native Americans in the United States\|(Native Americans?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(Nobel Prize)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[professional [\w]*?\|(professional)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(celebrit(?:y|ies)|[bm]illionaires?|class|poor|poverty(?: line|)|rich|socialites?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:conservation(?:ist|)\||)(conservation(ist|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(public (?:housing|transport))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:gossip|rumor|speculation\||)(gossip|rumou?r|speculation)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:society\||)(societ(al|y|ies))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(centrist|moderate|radical|extremist)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:left|right)[ -]wing politics\||)(left|right)([- ]wing(e[dr]|))\]\]", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(center|centre|extreme|far)([- ])(left|right)\]\]", "$1$2$3");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:social class\||)(middle|social|upper|working)(.class|)\]\]", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:social class\||)(class)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(curriculum|discussion|examination|skill)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(thes[ie]s)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(certificate|under-?graduate|Bachelor of Arts|Bachelor of Sciences?|Doctor of Philosophy|college|diplomas?|doctorates?|post-?graduate|Master['’]?s degree|honorary degree)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[((?:elementary|high(?:er|)|independent|nursery|primary|private|secondary|tertiary)(\sschools?|\seducation))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:elementary|high(?:er|)|independent|nursery|primary|private|secondary|tertiary)(?:\sschools?|\seducation)\|)((?:elementary|high(?:er|)|independent|nursery|primary|private|secondary|tertiary)(\sschools?|\seducation|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:university\||)(universit(?:ies|y))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(B|M)\.?(A|S|Sc)\.?\]\]", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:Doctor of philosophy\||)Ph\.? ?D\.?\]\]", "PhD");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:university|master\'?s|graduate|bachelor\'?s|post-?graduate|postgrad)\sdegree\|(degree)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Master of Business Administration\|(?:M\.B\.A\.|MBA)\]\]", "MBA");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:Bachelor|Doctor|Master)s? of [A-Z]\w*)\|([A-Z]\w*)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:Bachelor|Doctor|Master)s? of [A-Z]\w*)\|([A-Z])\.([A-Z]\w*)\.\]\]", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:honoris causa\||)(honorary degree)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(alma mater)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(research(?:er|))\]\]", "$1");
// lifestyle & religion
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:lifestyle \(sociology\)\||)(life[ -]?style)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:popularity\||)(popular(?:ity|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:personal life\||)((?:everyday |personal )life)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(beer|bread|brew(?:ery|ing|)|caf[eé]|cake|cheese|fast food|fat|modern|nutrition|restaurant|smoking|wine)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:moderni[sz]ation\||)(modern(?:i[sz]e[sdr]?|i[sz]ation))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:bar \((?:counter|establishment)\)\||)(bars?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:catering\||)(cater(?:ers?|ing|s?))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:champagne \(wine\)\||)(champagne)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:addict(?:ion|)\||)(addict(?:ed|ion|ive|s|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:alcohol(?:ism|)\||)(alcohol(?:ic(?:| beverages?)|ism|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:tourism\||)(touris[mt]s?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:religion\||)(religio(?:ns?|us))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(anniversary|birthday|centennial|centenary|exercise|(?:film |music |)festival|gays?|god|(?:hetero|homo)sexual|jesus|Christ|Pope|multi-?cultural|racis[mt]|secular|sex|slang|travel)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:lesbianism\||)(lesbian(?:ism|s|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:vegetarianism\||)(vegetarian(?:ism|s|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:celibacy\||)(celiba(?:cy|te|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:homosexuality\||)(homosexual(?:ity|s|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[coming out\|(openly)\]\] (gay|lesbian)", "$1 $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[multiculturalism\|(multicultural)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(popular culture)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:Ashkenazi|Berber|Bukharan|Cochin|Mizrahi|Sephardi) Jews\|(Askenazi|Berber|Bukharan|Cochin|Mizrahi|Sephardi)\]\]", "[[$1]]");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(Ashkenazi|Berber|Bukharan|Cochin|Mizrahi|Sephardi)\]\] \[\[(?:(?:jews|judaism)\||)(Jews?\]\])", "[[$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(Ashkenazi|Berber|Bukharan|Cochin|Mizrahi|Sephardi)\]\] \[\[(?:(?:jews|judaism)\||)(Jewish\]\])", "[[$1 Jews|$1 $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(Ashkenazi|Berber|Bukharan|Cochin|Mizrahi|Sephardi)(\]\])( Jews?)", "[[$1$3$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:Shia|Sunni) Islam\|(Shia|Sunni)\]\]", "[[$1]]");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(Shia|Sunni)\]\] \[\[(?:(?:islam|m[ou]sl[ei]m])\||)((?:islam|m[ou]sl[ei]m])s?\]\])", "[[$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(Shia|Sunni)\]\] \[\[(?:(?:islam|m[ou]sl[ei]m])\||)((?:islam|m[ou]sl[ei]m])s?\]\])", "[[$1 Islam|$1 $2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(Shia|Sunni)(\]\])( (?:islam|m[ou]sl[ei]m])s?)", "[[$1$3$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\[\[Bishop )\((?:Roman |)Catholic(?:ism| church)\)\|", "$1(Catholicism)|"); //repiping
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:Roman |)Catholic (?:Arch|)Bishops?\|", "[[Bishop (Catholicism)|"); //repiping
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(Roman Catholic)\]\] (\[\[(?:Bishop|Cardinal) \(Catholicism\)\|)((?:Bishop|Cardinal(?:-Deacon|))\]\])", "$2$1 $3");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\[\[(?:Bishop|Cardinal) \(Catholicism\)\|(?:Bishop|Cardinal(?:-Deacon|)))\]\]( (?:of|in) the )\[\[((?:Roman |)Catholic Church\]\])", "$1$2$3");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Priesthood \(Catholic Church\)\|(priesthood)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[Parish\|(pastoral)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)(?:\[\[Church of England\]\]|Church of England) \[\[(parish church)\]\]", "[[Church of England $1]]");
ArticleText=Regex.Replace(ArticleText, @"(?i)(?:\[\[(?:Anglicanism\||)Anglican\]\]|Anglican) \[\[(parish church)\]\]", "[[Anglican $1]]");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\| ?architectural type ?= ?)(Church)\|", "$1[[Church (building)|$2]]|");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:agnostic|athie)ism\||)((?:agnostic|athie)(?:ism|sts|s|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(bible|bishop|chaplain|clergy|clergym[ae]n|pastor|preacher|priest)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:christianity\||)(christians?|christianity|christian\sethic|christian\sfaith)\]\]", "$1");
// ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:roman\s|)catholic(?:\schurch|ism|)\||)((?:roman\s|)catholic(?:\schurch|ism|s?))\]\]", "$1"); //temporary disabling for work on church articles
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:protestant(?:ism|s|))\|(protestant(?:ism|s|))\]\]", "[[$1]]");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:muslim|islam)\|(moslems?|muslims?|islam(?:ic|))\]\]", "[[$1]]");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:jews|judaism)\|(jews?|jewish|judaism)\]\]", "[[$1]]");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(festival)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[((?:child|)birth|rape)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:abortion\||)(abort(?:ed|ion|s))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:pregnancy\||)(pregnan(?:cy|cies|t))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:engagement\||)(engag(?:ed|ment))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:marriage|divorce)\||)(marriage|marry|marries|married|married\scouples?|wed|wedding|spouses?|divorc(?:e[eds]?|ing))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:married and |)maiden names?\||)(maiden names?|née)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(honeymoon|marriage(?: licen[cs]e| certificate|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(burial|cemetery|eulogy|funeral|ghost|graveyard|memorial)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(graves?|tombs?)\]\]", "$1");
// biology, medical, crime
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(emergency|male|female|clinic|doctor|nurse|patient|physician|violence|volunteer)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(tablet|capsule|in[fj]ection|therapy|treatment)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(ankle|arm|brain|chest|elbow|ear|eye|face|finger|foot|hand|hair|head|knee|leg|mouth|nail|nose|pupil|skin|throat|thumb|toe|waist|wrist)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:human |)(ankle|arm|brain|chest|elbow|ear|eye|face|finger|foot|hand|hair|head|knee|leg|mouth|nail|nose|pupil|skin|throat|thumb|toe|waist|wrist)\|\1\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(blood)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(bacteri(?:um|a)|disease|epidemic|fung(?:us|i)|health|viruse?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:medicine\||)(medic(?:al|ation|inal|ines?))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:therapy\||)(therap(?:eutic|ies|y))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:death\||)(dead|death|die[ds]?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:blindness\||)(blind(ed|ing|s|ness))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:physician\||)(physicians?|doctors?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(cigarettes?|cigars?|smoking|tobacco)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(beauty|happiness|(?:sad|shy)ness|adventure|loves?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:crime\||)(crim(?:e|inal|inality)(|s))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:indictment\||)(indict(?:ed|ing|ment|)(|s))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[((?:machine |shot |)gun|rifle)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(arson|burglar(?:y|ie)|bullet|drug trafficking|forger(?:y|ie)|fraud|fugitive|murder|robber(?:y|ie)|security(?: guard|)|shooting|suspect|theft)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(arrest|trial|[bj]ail|execution|firing squad|jury|parole)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:Capital punishment\||)(Capital punishment|death(?: penalty|)|execut(?:ions?|ed?))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:traffic\scollision\||)(automobile\saccident|car\saccident|car\scrash|(?:road\s|)traffic\saccident|traffic\scollision)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(AIDS|HIV|bleed(?:ing|)|brain (damage|tumour)|(breast |lung |throat |)cancer|(?:clinical\s|)depression|coma|cough|(?:heart|kidney) failure|fever|fractures?|(?:drug |)overdose|gunshot wounds?|headache|ill|illness|injur(?:y|ies)|shock|stroke|suicide|surgery|vomit(?:ing|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:clinical\sdepression|depression\s\(mood\))\||)(clinical\sdepression|depression\s\(mood\)|depression|depressed)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:myocardial infarction\||)(heart attack|cardiac arrest)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:police|police (?:force|officer))\||)(polic(?:e force|e(wo|)m[ae]n|e officers?|ing|e[ds]?))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(police |private |)(detectives?)\]\]", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(prisons?)\]\]", "$1");
//music & media
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(awards?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:mononym\||)(mononymously)\]\]", "simply");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[((print |published |mass |broadcast |news |)media)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(anthology|messages?|press conference)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:media \(communication\)|print media|published media|mass media|broadcast media|news media|news media \(United States\))\|((mass.|)media)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(porn|pornograph(y|ic))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:child|film|movie|pornographic|stage|television|voice) actor\||)((?:child|film|movie|porn(ographic|)|stage|television|tv|voice) (actors?|actress(es|)|stars?))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[play \(theatre\)\|(plays?|theatrical|thesbian)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[act(?:ing|or)\|([^\[\]]*)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[leading (actor|actresse?|(?:title|lead|leading) role)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:title|lead|leading) actor\||)((?:title|lead|leading)( role|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:acting\||)(actor|acting|actresse?|thesbian)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:spokesperson\||)(spokes(?:(?:wo|)m[ae]n|person|models?))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:model\s\((?:art|fashion|person|profession)\)\||)((?:fashion[ -]|super[ -]?|)models?|modell?ing)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[dis[ck]\sjockey\|([^\]]{1,15})\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:radio broadcasting\||)(radio( broadcast|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:performing arts\||)(perform(?:ances?|ing|e[dr]s?|s|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(biographical film)\||)(?:biopic)\]\]", "biographical film");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:action film\||)(action)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[spin-off \(media\)\|(spin[ -]?off)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(animation|animated|film[ -]?mak(?:er|ing|)|broadcast(?:ing|)|comedy|documentar(?:y|ies)|drama|episode|pen.name|live.action|new|play|plot|prime[ -]?time|science.fiction|sci-fi|short film|special effects|stage|spin[ -]?off|stage.name)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:entertainment(?: industry|)\||)(entertain(?:e[dr]|ment|s?)|show.?(?:biz|business))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:film|music|sex) industry\||)(film|music|sex)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(([^\s:\|]*?)[\s-]documentary)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(documentary\s([\w]*?))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(([^\s:\|]*?)[\s-]documentary\s([\w]*?))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(pilot( episode|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:Television pilot|Pilot \(television episode\))\|([^\]]+?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:media|radio|tv|television) (?:announcers?|hosts?|personality|presenters?|stations?)\|(media|radio |tv |television |)(announcers?|broadcaster|hosts?|personalit(ies|y)|presenters?|stations?)\]\]", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:hosts?|personality|presenters?)\||)(media |radio |tv |television |)(announcer|broadcaster|hosts?|personalit(ies|y)|presenters?|stations?)\]\]", "$1$2");
// ArticleText=Regex.Replace(ArticleText, @"(?i)(\[\[)(Drama\s[Pp]refecture\]\])", "$1:$2");
// ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(drama\s([\w]*?))\]\]", "$1");
// rem piped music & media
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[animat(?:ion|ed|ed film)\|([^\]]+?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:documentary|documentary film)\|([^\]]+?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:situation comedy\||)(sit[ -]?com|situation comedy)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:soap opera\||)(soap(?: opera|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:documentary film|documentary \(film\)|documentary)\|([^\]]+?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:Serial \(radio and television\)|serial)\|([^\]]+?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[((television|tv) (film|movie|pilot|program(me|)|(mini[ -]?|)series|show)(s|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:drama|dramatic programming)\||)(drama series|drama films?|tv drama|television drama)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:reality\s(?:television|show|tv))\||)(reality(?: show| tv| television|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:television|tv)(?:\sprogram(?:me)?|)\|(television|tv|program(?:me|)|show)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:talk|chat|talent|game|variety).show\||)((?:talk|chat|talent|game|variety)(.?show|)( host|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[([^\W\s:\]]*?\s?)(television series|television film?|television show?|tv series|television\sprogram|tv program|television\ssitcom|tv sitcom)\]\]", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:television series|television film?|television show?|tv series|television\sprogram|tv program|television\ssitcom|tv sitcom)\|([^\]]+?)\]\]", "$1");
// ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:rock\smusic|rock\s\(music\))\|([^\]]+?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)(?:\[\[(?:(?:Great Britain|United Kingdom)\||)British\]\]|British) \[\[(?:rock music\||)(rock(?: music)?)\]\]", "[[British rock]]");
// ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[pop\smusic\|([^\]]+?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:singing|singer)\|([^\]]+?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(soundtrack)(\salbum|)\]\]", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:demo|single|solo) \(music\)\||)(demo|single|solo)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(beat|notes?|rhythms?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(black (?:&|and) white)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(audio ?tape|cassette|DVD|LP|VHS|video|music video|compact\sdis[ck]|CD|C\.D\.|Compact Disc single|C\. D\. single|CD single)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[compact\sdis[ck]\|(?:CD|C\.D\.)(s|)\]\]", "CD$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(CDROM)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(albums?|album track|albums? \(music\)|record albums?)\|([^\]]+?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[((?:debut |music |record |self.titled debut |sophomore |)album)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[((?:music|radio|recording|tv|television) (?:artist|studio))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:music|radio|recording|tv|television) (?:artist|studio))\|([^\]]+?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(singing|singer|vocal|vocalist|Pop\ssinger|Female\svocals|Songstress|Clean\svocals|Singer\s\(music\)|Pop\ssinger)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:backing|lead) (?:singer|vocals|vocalist)\||)((?:backing|lead)(?: singer| vocal| vocalist|)(?:s|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:human voice|singer|singing|vocals|vocalist)\||)((?:singer|vocal|vocalist|voice)(?:s|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(classical |jazz |musical |pop |rock |)(band|ensemble|music|musician|group|standard|song)\]\]", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:band\s\(music\)|group\s\(music\)|musical\sensemble|musical (?:band|group))\||)(musical\sensemble|group|band|rock\sbands?|Instrumental\sensemble|Rock\sgroups?|list\sof\smusical\sensembles|musical\sgroup|music\sband|music\sgroup|musical\sband|bar\sband|musical\sensembles?|music\sensemble|pop\sband)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\[\[)(bass |blues |classical |electric |lead |rhythm )\((guitar)\s?\)(?=[\|\]])", "$1$2$3");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[((blues |classical |electric |lead |rhythm |)(guitar|guitarist)(s|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:bass\s|electric\s|lead\s|rhythm\s|)guitar\|([^\]]+?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(bass|bassist|bass guitarists?|electric\sbass|metal\sbass|electric\sbass\sguitar|Alternate\sbass|bass\sguitars?|fretless\sbass\sguitar|base\sguitar)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:[^\]]+?) guitar\|((?:bass|electric|lead|rhythm)(?:\sguitar|))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:keyboard\sinstrument|musical keyboard)\||)(keyboard\sinstruments?|keyboards?|keyboardists?)(|s)\]\]", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:drum[ -]?kit|drummer)\||)(drums?|drum ?kits?|drumming|drummers?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:percussion\sinstrument\||)(percussion\sinstrument|percussion|percussionist)(|s)\]\]", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[((?:se|pre)quels?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(box office|concerto?|opera|orchestra|repertoire)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:film\||)(cinema|(?:feature |)films?|filming|movies?|big\sscreen|motion pictures?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:music\sarranger\||)(music\sarranger|arranger)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[((executive|film|stage|television|tv|theat(er|re|rical)|music|radio|record) (direc|distribu|produc)(t?ing|tion|tor|er))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:executive|film|stage|television|tv|theat(?:er|re|rical)|music|radio|record)\s(?:direc|distribu|produc)(?:t?ing|tion|tor|er)\||)(executive|film|music|television|tv|theat(?:er|re|rical)|radio|record|(?:direc|distribu|produc)(?:t?ing|ted|ts?|tion|tors?|e[dsr]))\]\]", "$1");
// literary
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:stand[ -]?up |)comedy\||)(stand[ -]?up |)(comedy|comedies|comic(?: book|)s?|comedians?|comediennes?|stand[ -]?up)\]\]", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:poetry\||)(poe([mt]s?|tic|try))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:best[- ]?seller\||)(best[- ]?sell(ers?|ing))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[hardcover\|(hard ?back|hard ?cover)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[((?:hard|paper)(?:back|cover))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)Print \(Hard(back|cover) (&|and) Paperback\)", "Print (hardback & paperback)");
ArticleText=Regex.Replace(ArticleText, @"(?i)Print \(Hard(back|cover)\)", "Print (hard$1)");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:fiction(?:al character)?|Character \(arts\))\||)(fictional|(?:fictional |)character)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(book|non.fiction|horror|humou?r(?:ist|)|(?:adult |children's |teen |)literature|fiction|screenplay|magazine|(?:(?:auto.?)biograph|histor)ical novel|(?:s|pr)equel|satir(?:e|ist)|short story|suspense|thriller|trilogy)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:creative writing\||)((?:creative |)writ(?:er|ing))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:public speaking\||)((?:public |)speaker)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:author\||)(?:writer)\]\]", "author");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:translat(?:ion|or)\||)(translat(?:ion|ing|ors?))\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:essay\||)(essays?|essayists?)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:encyclopa?edia\||)(encyclopa?edi[ac])\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(Wikipedia)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:novel|novella)\||)(novel|novella|novell?ist)\]\]", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:plot \(narrative\)\||)(plots?)\]\]", "$1");
// ArticleText=Regex.Replace(ArticleText, @"(?i)\[\[(?:(?:fantasy|romance|children's)(?: novel| literature)\||)(myth|fantasy|romance|children's)( books?| novel| literature|)\]\]", "$1$2");
//From Sources.js [function Ohc_sources_prep]
// removing references to other WP articles and 'external' WP links
ArticleText=Regex.Replace(ArticleText, @"(?i)<ref>https?:\/\/(?:en\.wikipedia\.org\/wiki|\w*\.(?:facebook|myspace|twitter)\.com)\/[^\s\]<]*<\/ref>", "");
ArticleText=Regex.Replace(ArticleText, @"(?i)<ref>\[https?:\/\/(?:en\.wikipedia\.org\/wiki|\w*\.(?:facebook|myspace|twitter)\.com)\/[^\s\]]*[ ]+[\w\d][^\]]*\]<\/ref>", "");
ArticleText=Regex.Replace(ArticleText, @"(?i)\|[ ]*url[ ]*=[ ]*https?:\/\/(?:\w{2}\.wikipedia\.org\/wiki|\w*\.(?:facebook|myspace|twitter)\.com)[^\s\|\{\}<]*(?=[ ]*[\|\}])", "");
ArticleText=Regex.Replace(ArticleText, @"(?i)<ref[^\<>]*>[^\<>]*\|[ ]*url ?=https?:\/\/(?:\w{2}\.wikipedia\.org\/wiki|\w*\.(?:facebook|myspace|twitter)\.com)\/[^<>]*<\/ref>", "");
ArticleText=Regex.Replace(ArticleText, @"(?i)[ ]\[https?:\/\/en\.wikipedia\.org\/wiki\/[^\s\]]*[ ]+([\w][^\]]*)\]", " [[$1]]");
// removing external links within publisher/journal/work fields
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|\s?(?:newspaper|work|journal|publisher)\s*\=\s*)\[https?:\/\/[^\s\]]*\s([\w\d][^\]]*)\]", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|\s?author(?:link\d?|)\s*\=\s*)\[https?:\/\/[^\s\]]*\s([\w\d][^\]]*)\]", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|\s?(?:newspaper|work|journal|publisher|author)\s*\=\s*)www\.([\w\d][^\|\}]*)(?=[\|\}])", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|\s?author(?:link\d?|)\s*\=\s*)www\.([\w\d][^\|\}]*)(?=[\|\}])", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|\s?author\s*\=\s*)(?:by |)(?:wire staff|staff reporters?|)[ ]*(?=[\|\}])", "");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|\s?author\s*\=\s*)([A-Z][a-z]*(?: [A-Z][a-z]*)*) (?:wire staff|(?:staff |)reporters?)[ ]*(?=[\|\}])", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)\|[ ]*last=Reporter[ ]*\|[ ]*first=[^\|\{\}]*(?=[\|{}])=", "");
ArticleText=Regex.Replace(ArticleText, @"(?i)\{\{wikinews ?(|2|cat(?:egory)?|has|par2?|portal|table|-inline)(\|[^\}]+|)\}\}\s*", "");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\*[ ]*|)\[\[n:[^\]]*\]\][^\r\n]*[\r\n]", "");
ArticleText=Regex.Replace(ArticleText, @"(?i)\*[ ]*\{\{(?:Facebook|Find a Grave|Myspace)\|([^}]*)\}\}[\n\r\s]*", "");
//citation template fixes
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|\s?)published\s?=", "$1publisher=");
// rem copyright assertion
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|\s?publisher\s*\=\s*)(?:\[\[copyright(?:\|©|)\]\])\s?", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|\s?publisher\s*\=\s*)(?:©|copyright)\s?", "$1");
// misused 'date' parameter - part of AWB general fixes
// ArticleText=Regex.Replace(ArticleText, @"(?i)\|\s?date(\s*=\s*[12]\d{3}\s?[\|\}])", "|year$1");
// rem toggles and redundant quote marks
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|\s?(?:agency|author|newspaper|work|journal|publisher)\s*\=\s*)\'\'([^\|\}]+)\'\'(?=\s*[\}\|])", "$1$2"); //without link
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|\s?(?:agency|author|newspaper|work|journal|publisher)\s*\=\s*)\'\'(\[\[(?:[^\|]+\||)[^\|\]]+\]\])\'\'(?=\s*[\}\|])", "$1$2"); //with link
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|\s?title\s*\=\s*)\''([^\|\{\}]+)\''", "$1$2"); //rem ' in titles
// Italicising journals
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|\s*)publisher(\s*=\s*(?:\[\[|)(?:Billboard|Empire|Kerrang|Mixmag|Mojo|NME))(?:\.com|\.co\.uk|) ?(?=[\]|}\n])", "$1work$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|\s*)publisher(\s*=\s*(?:\[\[|)(?:The ?|)(?:\w+ |)*(?:Economist|Gazette|Guardian|Herald|Independent|Mail|Mirror|Post|Standard|Star|Telegraph|Times))(?:\.com|\.co\.uk|) ?(?=[\]|}\n])", "$1work$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|\s*)publisher(\s*=\s*(?:\[\[|)(?:The ?|)(?:Hindustan Times|The ?Hindu|Times ?of ?India|Deccan ?Chronicle|Indian ?Express|Economic ?Times|NME))(?:\.com|\.co\.uk|) ?(?=[\]|}\n])", "$1work$2");
// rem corporate designation
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|\s?publisher\s*\=\s*[^\[\|\}]{1,40}), (?:Inc|LL[CP]|Ltd|PLC|SA)\.?(?=[ ]*\|\})", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|\s?publisher\s*\=\s*[^\[\|\}]{1,40}) (?:Inc|LL[CP]|Ltd|PLC|SA)\.?(?=[ ]*\|\})", "$1");
// rem unnecessary quote marks
// ArticleText=Regex.Replace(ArticleText, @"(?i)(\|\s?title\s*\=\s*)[""“"]([^\|]+)[""”"](?=\s?[\|\}])", "$1$2");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|\s?title\s*\=\s*)['‘]([^\|'’]+)['’](?=\s?[\|\}])", "$1$2");
// repl double 'in-title' quote marks with single quotes
// ArticleText=Regex.Replace(ArticleText, @"(?i)(\|\s?title\s*\=\s*[\w ]* )[""“"]((?:\w[\w]* )+(?:\w[\w]*))[""”"]([^\|]+|)(?=\s?[\|\}])", "$1\'$2\'$3");
// rem misplaced punctuation
ArticleText=Regex.Replace(ArticleText, @"(?i)(<ref[^>]*>[^<]+?[\]\.\},;–]\s*\'\'[\w-]*(?: [\w-]*){0,3})(\.com|)([;,\.])(\'\')([^<]*?<\/ref>)", "$1$2$4$3$5");
// ArticleText=Regex.Replace(ArticleText, @"(?i)([\w]+)\.(['"""]\]?)(\W)", "$1$2.$3"); //LQ for titles
// removing blank parameters
ArticleText=Regex.Replace(ArticleText, @"(?i)(?:\|[ ]*(?:accessdate|agency|archive(?:date|url)|arxiv|asin|at|author(-?link|-mask|-name-separator|-separator|\d|\d-link|link\d?|)|bibcode|chapter|chapter-url|coauthors|contribution(?:-url|)|date|deadurl|display-authors|doi|doi-inactive|doibroken|edition|editor(?:-first|-last|-link|\d|\d-first|\d-last|\d-link|)|(?:first|last)\d?|format|id|is[bs]n|issue|jfm|journal|jstor|language|lay(?:date|source|summary)|lccn|location|magazine|month|mr|newspaper|nopp|oclc|ol|origyear|osti|others|pages?|periodical|place|pm[cd]|pmid|postscript|publication(?:-date|-place)|publisher|quote|ref|rfc|separator|series|ssrn|trans_title|type|url|volume|work|year|zbl)[ ]*=[\s]*)(?=[\}\|])", "");
//rem underlining within certain fields
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|\s?(?:journal|newspaper|periodical|publisher|work)\s*\=\s*)<u>([^\|\}]*)<\/u>", "$1");
//rem redundant top-level domains (.com, .net, .org)
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|\s?(?:journal|newspaper|periodical|publisher|work)\s*\=\s*)(\[\[[^\[\]\}]*\]\])\.(?:biz|com|net|org|co\.uk)(?=\s*[\|\}])", "$1$2");
//rem duplicated publishers in separate fields (pre)
ArticleText=Regex.Replace(ArticleText, @"(?i)[‒–—―]+\s*([^\|\}]{3,})\s*(\|\s?(?:publisher|work)\s*\=\s*(?:\w+\.|))\1(?=\s[\|\}])", "$2$1");
//'work' and its alias (pre)
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*?newspaper[ ]*=[^\|]*(?:\|[^\{\}]*|))(?:\|[ ]*?work[ ]*=[^\|\}]*)(?=[\|\}])+", "$1");
//rem linking within locations field
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*?location=[ ]*?)\[\[([^\|\]]+?)\]\](?:(,? )\[\[([^\|\]]+?)\]\]|)([ ]{0,1})", "$1$2$3$4$5");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*?location=[ ]*?)\[\[(?:[^\|\]]+?\|)([\w\s\,]+?)\]\](?:(,? )\[\[([^\|\]]+?)\]\]|)([ ]{0,1})", "$1$2$3$4$5");
// removing english icon template
ArticleText=Regex.Replace(ArticleText, @"(?i)[ ]?\{\{en[- ]icon\}\}", "");
// removing icon template from within "|language=" parameter
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*?language[ ]*?=[ ]*?)\{\{(\w{2})[- ]icon\}\}", "$1$2");
// eliminating time of day
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*author[ ]*=[ ]*)(?:posted|published)(?: by| on|)[\s:](?=\s*\w)", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*author[ ]*=[ ]*)[123]?\d (Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?) (?:(?:18|19|20|\d)\d{2})(?: at| on)", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*author[ ]*=[ ]*)[123]?\d (Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|June?|July?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?) (?:(?:18|19|20|\d)\d{2})", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*(?:date|archivedate|accessdate|author)[ ]*=[ ]*)[0-2]?\d:[0-5]\d(?:[ ]| )(?:[ap]m ?|[ap]\.m\. |[A-Z]{1,2}T|UTC)[\.,]?[ ]?", "$1");
// eliminating days of the week
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*(?:date|archivedate|accessdate|author)[ ]*=[ ]*)(?:(?:Mon|Tues|Wednes|Thurs|Fri|Satur|Sun)day,?)\s", "$1");
ArticleText=Regex.Replace(ArticleText, @"(?i)(\|[ ]*(?:date|archivedate|accessdate|author)[ ]*=[ ]*)(?:(?:Mon|Tues?|Wed|Thur?|Fri|Sat|Sun)[\.,]?)\s", "$1");
return ht.AddBack(ArticleText);
return ArticleText;
}