我发现了一个有趣的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/

10-09 19:18