2010-10-26 7 views

Répondre

2

Je pense qu'une expression régulière remplacer est le moyen le plus simple:

s = Regex.Replace(
    s, 
    @"<0[Xx]([\dA-Fa-f]{2})>", 
    m => ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString() 
); 

En faisant correspondre un modèle exact, il place moins de restrictions sur la chaîne, par exemple, que les caractères < et > peuvent encore être utilisés. En outre, si une balise rencontre un problème, elle sera simplement libérée au lieu de provoquer une exception.

Ceci va remplacer les balises comme <0X4A> et <0x4a>, mais laisser par exemple <0x04a> inchangé.

1

Vous pouvez facilement le faire avec une expression régulière:

s = Regex.Replace(s, "<0x([0-9a-f]+)>", 
     m => Char.ConvertFromUtf32(
         Int32.Parse(m.Groups[1].Value, NumberStyles.HexNumber)) 
    ); 

Il est probablement manque quelques contrôles d'erreur. Cela utilise un overload of Regex.Replace that takes a MatchEvaluator.

0

Faites correspondre le nombre et convertissez en int puis en char.

var str = "A<0x30>B"; 

var result = Regex.Replace(str, "<0x((\\d|[A-Z])+)>", 
    delegate (Match m) 
    { 
     return ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString(); 
    }, RegexOptions.IgnoreCase); 

sortie

A0B 
Questions connexes