2010-08-12 5 views
3

Je la situation ci-dessousRemplacer la chaîne avec l'expression régulière

Cas 1:

Entrée:X(P)~AK,X(MV)~AK

Remplacer par:AP

Sortie:X(P)~AP,X(MV)~AP

Cas n ° 2:

Entrée:X(PH)~B$,X(PL)~B$,X(MV)~AP

Remplacer par: USD$

Sortie:X(PH)~USD$,X(PL)~USD$,X(MV)~USD$

Comme on peut le faire que, toujours le ~<string> sera remplacé.

Est-il possible d'atteindre la même chose par l'expression régulière?

Remarque: ~ Rien ne sera connu au moment de la compilation, à l'exception de la structure. Une structure typique

va comme

X(<Variable Name>)~<Variable Name> 

J'utilise C# 3.0

+1

Votre question n'a rien à voir avec C# - pas C# 3,0 ni aucun autre. Votre question a à voir avec.NET, qui est où le support d'expression régulière est. Il n'y a pas de support d'expression régulière en C#. –

Répondre

5

Ce regex simple, fera:

~(\w*[A-Z$])

Vous pouvez tester ici:

http://regexhero.net/tester/

Sélectionnez l'onglet Remplacer à RegexHero. Entrez le ~(\w*[A-Z$]) en tant qu'expression régulière. Entrez le ~AP comme chaîne de remplacement. Entrez le X(P)~AK,X(MV)~AK comme chaîne cible.

Vous obtiendrez ce que la sortie:

X(P)~AP,X(MV)~AP 

En langage C#, vous auriez quelque chose comme ceci:

class RegExReplace 
{ 
    static void Main() 
    { 
     string text = "X(P)~AK,X(MV)~AK"; 

     Console.WriteLine("text=[" + text + "]"); 

     string result = Regex.Replace(text, @"~(\w*[A-Z$])", "~AP"); 

     // Prints: [X(P)~AP,X(MV)~AP] 
     Console.WriteLine("result=[" + result + "]"); 

     text = "X(PH)~B$,X(PL)~B$,X(MV)~AP"; 

     Console.WriteLine("text=[" + text + "]"); 

     result = Regex.Replace(text, @"~(\w*[A-Z$])", "~USD$"); 

     // Prints: [X(PH)~USD$,X(PL)~USD$,X(MV)~USD$] 
     Console.WriteLine("result=[" + result + "]"); 
    } 
} 
+0

Votre programme est grand mais échoue en string text = "X (P) ~%, X (MV) ~% "; chaîne selecteditem = "KP"; string result = Regex.Replace (texte, @ "~ (\ w * [A-Z $])", "~" + selecteditem); –

+0

Oh ... ajoutez ce symbole centile% au motif regex. Comme ceci: '~ (\ w * [A-Z $%])' –

0

Pourquoi ne pas utiliser String.replace (string, string)?

+0

Au moment de la compilation, il ne me connaîtra pas "AK" ou "B $" .. Alors, comment puis-je appliquer cela –

Questions connexes