我承认正则表达式是一个陌生的世界,我无法真正让我的头脑缠绕它。但我认为这个问题属于正则表达式世界。 我想将“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;
}
谢谢
答案 0 :(得分:10)
实际上并不确定你的Mac是否可行....例如,虽然麦克唐纳应该是麦当劳,但梅西夫人真的不想成为麦克伊夫人。如果它的公司名称怎么办? Smith's Machinery,不想成为史密斯的MacHinery!
“O”前缀也可能有问题。想想奥佩拉先生,或奥帕尔夫人!
使用Mac和Mc前缀的最佳方法是保存一个例外列表,您可以参考该列表。这些样式名称只有有限数量!
以下内容应该有助于开始: http://dgmweb.net/genealogy/FGS/Indices/EveryNameIndex-Mc.shtml
答案 1 :(得分:0)
简单的正则表达式不容易完成工作 - 问题非常复杂。我建议尝试以下方法。
"o'brian" => "o" "'" "brian" "macdonald" => "mac" "" "donald" "who-knew" => "who" "-" "knew" "who knew" => "who" " " "knew"
处理所有单词大写第一个字母,所有剩余字母小写。
再次加入这些词语,也许修改分隔符。
您至少需要一个可能的分隔符列表和一个可能出现的单词列表,这些单词没有分隔符,如“MacDonald”中的“Mac”。