请帮助使用正则表达式声明o'brian或macdonald这样的名字

时间:2009-08-24 12:29:32

标签: c# regex

我承认正则表达式是一个陌生的世界,我无法真正让我的头脑缠绕它。但我认为这个问题属于正则表达式世界。 我想将“o'brian”等姓名改为“O'Brian”或“macdonald”改为“MacDonald”或“who-know”改为“Who-Knew”或“who know”改为“Who Knew”< / p> 到目前为止,我所拥有的只是....

setCaps("o'brian");
string setCaps(string s)
    {
        string result = Regex.Replace(s, @"\b[a-z]['a-z]\w+", delegate(Match match)
                    {
                        string ch = match.ToString();
                        return char.ToUpper(ch[0]) + ch.Substring(1);
                    });

        return result;

    }

谢谢

2 个答案:

答案 0 :(得分:10)

实际上并不确定你的Mac是否可行....例如,虽然麦克唐纳应该是麦当劳,但梅西夫人真的不想成为麦克伊夫人。如果它的公司名称怎么办? Smith's Machinery,不想成为史密斯的MacHinery!

“O”前缀也可能有问题。想想奥佩拉先生,或奥帕尔夫人!

使用Mac和Mc前缀的最佳方法是保存一个例外列表,您可以参考该列表。这些样式名称只有有限数量!

以下内容应该有助于开始: http://dgmweb.net/genealogy/FGS/Indices/EveryNameIndex-Mc.shtml

答案 1 :(得分:0)

简单的正则表达式不容易完成工作 - 问题非常复杂。我建议尝试以下方法。

  1. 将输入拆分为“单词”和分隔符。
  2.     "o'brian"   => "o"    "'"  "brian"
        "macdonald" => "mac"  ""   "donald"
        "who-knew"  => "who"  "-"  "knew"
        "who knew"  => "who"  " "  "knew"
    
    1. 处理所有单词大写第一个字母,所有剩余字母小写。

    2. 再次加入这些词语,也许修改分隔符。

    3. 您至少需要一个可能的分隔符列表和一个可能出现的单词列表,这些单词没有分隔符,如“MacDonald”中的“Mac”。