2009-08-24 3 views
1

Je reconnais regex est un monde étrange et je n'ai pas été en mesure d'obtenir vraiment ma tête enroulée autour d'elle. Mais j'ai ce problème qui, je crois, appartient au monde regex. je voudrais changer les noms de famille comme "o'brian" à "O'Brian" ou "macdonald" à "MacDonald" ou "qui-savaient" à "Who-Knew" ou "qui savait" à "Who Knew"S'il vous plaît aider avec la déclaration regex pour des noms comme o'brian ou macdonald

jusqu'à présent est tout ce que j'ai ....

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; 

    } 

Merci

Répondre

10

Pas vraiment sûr que cela est possible pour votre Mac .... par exemple, alors que macdonald devrait être MacDonald, Mme Macey ne veut vraiment pas être Mme MacEy. Et si les noms de ses sociétés? Smith's Machinery, ne veut pas être le MacHinery de Smith!

Le préfixe "O" pourrait aussi être problématique. Considérez M. O'Pera, ou Mme O'Pal! La meilleure chose à faire avec les préfixes Mac et Mc est de conserver une liste d'exceptions, à laquelle vous vous référez. Il y a seulement un nombre fini de ces noms de style!

Les éléments suivants devraient aider à démarrer: http://dgmweb.net/genealogy/FGS/Indices/EveryNameIndex-Mc.shtml

+2

D'accord. Quand il s'agit de nommer des majuscules, vous devriez probablement laisser l'utilisateur taper dessus plutôt que d'essayer de deviner comment cela devrait être fait. Il y a des gens qui ont des noms étranges avec une étrange capitalisation préférentielle qui pourraient s'irriter si vous essayez de forcer ce qu'ils considèrent être une capitalisation incorrecte. – Welbog

+0

... et tous les Macdonald ne sont pas orthographiés MacDonald! – dtb

+0

... même chose pour Macintosh! –

0

expressions régulières simples ne seront pas facilement faire le travail - le problème est assez complexe. Je suggère d'essayer ce qui suit.

  1. Divisez l'entrée en "mots" et en séparateurs.
 
    "o'brian" => "o" "'" "brian" 
    "macdonald" => "mac" "" "donald" 
    "who-knew" => "who" "-" "knew" 
    "who knew" => "who" " " "knew" 
  1. processus tous les mots qui la première lettre en majuscule et toutes les autres lettres minuscules.

  2. Regroupez les mots et modifiez éventuellement les séparateurs.

Vous aurez au moins besoin d'une liste des séparateurs possibles et une liste de mots qui pourraient occure jointes ensemble sans séparateur comme « Mac » dans « MacDonald ».

+1

comme @dtb a déclaré dans le commentaire @ réponse de James, pas tout Macdonald == MacDonald. –

Questions connexes