#!/usr/bin/evn python import re; def GetMatchAndApplyFuncs(strPattern, strSearch, strReplace): def MatchRule(strWord): return re.search(strPattern, strWord); def ApplyRule(strWord): return re.sub(strSearch, strReplace, strWord); return (MatchRule, ApplyRule); g_tlPattern = ( ('[sxz]$', '$', 'es'), ('[^aeioudgkprt]h$', '$', 'es'), ('(qu|[^aeiou])y$', 'y$', 'ies'), ('$', '$', 's') ); g_lsRules = [GetMatchAndApplyFuncs(strPattern, strSearch, strReplace) for (strPattern, strSearch, strReplace) in g_tlPattern]; def GetPlural(strWord): if not strWord: return ""; for fnMatch, fnApply in g_lsRules: if fnMatch(strWord): return fnApply(strWord); if "__main__" == __name__: strVal = "exhs"; strPlural = GetPlural(strVal); print("%s plural ==> %s" %(strVal, strPlural));