Пожалуйста, помогите с регулярным выражением для имен, как О'Брайан или Макдональд - PullRequest
1 голос
/ 24 августа 2009

Я признаю, что регулярное выражение - это странный мир, и я не смог по-настоящему обернуть вокруг него голову. Но у меня есть проблема, которая, я считаю, принадлежит миру регулярных выражений. я хотел бы изменить фамилии, такие как «o'brian» на «O'Brian» или «macdonald» на «MacDonald» или «кто-знал» на «кто-знал» или «кто-то знал» на «кто знал»

пока все, что у меня есть ...

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 ]

10 голосов
/ 24 августа 2009

На самом деле не уверен, что это возможно для вашего Mac .... Например, хотя macdonald должен быть MacDonald, миссис Macey действительно не хочет быть Mrs MacEy. А что, если названия его компаний? Smith's Machinery, не хочет быть Смитом MacHinery!

Префикс «O» также может быть проблематичным. Посмотрите на мистера О'Пера или миссис О'Пал!

Лучшее, что можно сделать с префиксами Mac и Mc, - это хранить список исключений, к которому вы обращаетесь. Существует только конечное число названий этих стилей!

Следующее должно помочь начать: http://dgmweb.net/genealogy/FGS/Indices/EveryNameIndex-Mc.shtml

0 голосов
/ 24 августа 2009

Простые регулярные выражения не справятся с задачей - проблема довольно сложная. Предлагаю попробовать следующее.

  1. Разделить ввод на "слова" и разделители.
    "o'brian"   => "o"    "'"  "brian"
    "macdonald" => "mac"  ""   "donald"
    "who-knew"  => "who"  "-"  "knew"
    "who knew"  => "who"  " "  "knew"
  1. Обработка всех слов с использованием прописных букв первой буквы и всех оставшихся букв строчных букв.

  2. Снова соедините слова и, возможно, измените разделители.

Вам по крайней мере понадобится список возможных разделителей и список слов, которые могут произойти, соединенные вместе без разделителя, такого как «Mac» в «MacDonald».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...