我发现了一个有趣的singularization类,它可以正常工作,但是我遇到了一个问题,因为我对正则表达式不太了解,似乎无法弄清楚该如何解决。
给定以下内容:
private static readonly IDictionary<string, string> Singularizations =
new Dictionary<string, string>
{
{"people", "person"},
{"oxen", "ox"},
{"children", "child"},
{"feet", "foot"},
{"teeth", "tooth"},
{"geese", "goose"},
{"(.*)ives?", "$1ife"},
{"(.*)ves?", "$1f"},
{"(.*)men$", "$1man"},
{"(.+[aeiou])ys$", "$1y"},
{"(.+[^aeiou])ies$", "$1y"},
{"(.+)zes$", "$1"},
{"([m|l])ice$", "$1ouse"},
{"matrices", @"matrix"},
{"indices", @"index"},
{"(.+[^aeiou])ices$","$1ice"},
{"(.*)ices", @"$1ex"},
{"(octop|vir)i$", "$1us"},
{"(.+(s|x|sh|ch))es$", @"$1"},
{"(.+)s", @"$1"}
};
如果我对单词“ Levels”进行测试,则返回“ Lefls”,基本上与以下单词不匹配:
{"(.*)ves?", "$1f"}
有什么办法可以为此添加新规则呢?我尝试添加{“(。*)els?”,“ $ 1f”},但是正则表达式验证器只是跳过了这一点。
更新说明:
感谢所有反馈,我了解了新的PluralizationService,但这是特定于.Net 4.0的,我的客户端不会很快从3.5升级,因此不得不寻找另一种解决方法。
最佳答案
我认为问题是(。*)ves?应该在末尾有一个$,因此它与级别的leve
ls部分不匹配。
关于c# - C#中的单数化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9672999/