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

Bra*_*rad 1 c# regex

我承认正则表达式是一个奇怪的世界,我无法真正让我的头脑缠绕它.但我认为这个问题属于正则表达式世界.我想将"o'brian"等姓名改为"O'Brian"或"macdonald"改为"MacDonald"或"who-know"改为"Who-Knew"或"who know"改为"Who Knew"

到目前为止,我所拥有的只是....

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;

    }
Run Code Online (Sandbox Code Playgroud)

谢谢

Jam*_*man 10

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

"O"前缀也可能存在问题.想想奥佩拉先生,或奥帕尔夫人!

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

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

  • 同意.在名称大写时,您应该将其留给用户输入,而不是试图猜测应该如何进行.有些人有奇怪的名字和奇怪的首选大写,如果你试图强迫他们认为对他们不正确的大写,他们可能会感到烦躁. (2认同)