2009-12-22 5 views
4

J'ai environ 20 caractères que j'ai besoin de remplacer par d'autres caractères dans un bloc de texte. Existe-t-il un moyen de le faire dans une seule regex, et que serait cette regex? Ou existe-t-il un moyen plus simple de le faire dans .NET?Remplacer Regex - Caractères multiples

Par exemple, un extrait de ma table de mappage est

œ => oe
z => z
Y => Y
À => A
Á => A
 = > a
à => a
Ä => AE

+0

voulez-vous vraiment utiliser Regex.Replace(), ou vous pouvez accepter toute solution, comme String.replace ("à", a)? – serhio

Répondre

0

Je ne suis pas au courant d'un moyen facile de le faire en utilisant regex (pas sûr qu'il est possible), mais voici une cl ean façon de le faire:

var replaceChars = new Dictionary<string, string> 
        { 
         {"œ", "oe"}, 
         {"ž", "z"} 
        }; 
string s = "ždfasœ"; 

foreach (var c in replaceChars) 
    s = s.Replace(c.Key, c.Value); 

Console.WriteLine(s); 
+0

StringBuilder serait une meilleure solution. – Joe

0

Pour remplacer la chaîne, je venais itérer ces derniers dans votre table de correspondance et utilisez String.replace sur eux:

foreach(var r in replacements.Values) 
{ 
    myString.Replace(r.Key, r); 
} 

Pas le plus performant, mais si vous n'avez pas beaucoup de cordes à franchir, ça devrait être assez bon :).

4

Si vous aimez vraiment le faire en simple regex, il y a moyen de le faire.

Dictionary<string, string> map = new Dictionary<string, string>() { 
    {"œ","oe"}, 
    {"ž", "z"}, 
    {"Ÿ","Y"}, 
    {"À","A"}, 
    {"Á","A"}, 
    {"Â","A"}, 
    {"Ã","A"}, 
    {"Ä","AE"}, 
}; 

string str = "AAAœžŸÀÂÃÄZZZ"; 

Regex r = new Regex(@"[œžŸÀÂÃÄ]"); 

string output = r.Replace(str, (Match m) => map[m.Value]); 

Console.WriteLine(output); 

Résultat

AAAoezYAAAAEZZZ 
+0

est-ce plus ou moins de ressources et de temps que string.replace ("œ", "oe"), etc ...? – serhio

+0

Le remplacement normal de la chaîne devrait être plus rapide que celui de la regex – YOU